两种Tkinter类构造方法

# -*- coding: utf-8 -*-
"""
@author: Roger Liu
"""
import tkinter as tk

#两种类构造方法:

class App1: #tk成为App成员,指向root(master和root等价)
    def __init__(self, master):
        self.master = master
        self.master.geometry('400x200')
        self.initWidgets()

    def initWidgets(self):
        fm = tk.Frame(self.master) #临时变量
        fm.pack() #将Frame加载到self.master
        tk.Button(fm, text='第一个',command=self.sayhello).pack() #加载到Frame

    def sayhello(self):
        print('APP1:hello,world')

class App2(tk.Tk): #继承于Tk类
    def __init__(self):
        super().__init__()
        self.initWidgets()
        self.geometry('400x200')
        
    def initWidgets(self):

        fm = tk.Frame(master=self) #临时变量
        fm.pack()  #将Frame加载到类
        tk.Button(fm, text='第二个',command=self.sayhello).pack() #加载到Frame

    def sayhello(self):
        print('APP2:hello,world')
        
root=tk.Tk()
c=App1(root)

print(c.master==root)
#True

#root.destroy()

x=App2()
type(x)

# x.mainloop()   #两种方法都会显示两个界面,Puzzling
root.mainloop()  #两种方法都会显示两个界面,Puzzling

转载 :

kinter class继承有三种方式。

提醒注意这几种继承的运行方式

一、继承 object

1.铺tk.Frame给parent:

说明:

  • self.rootframe = tk.Frame(parent)
  • tk.Label(self.rootframe)
 
  1.  
    import tkinter as tk
  2.  
     
  3.  
    class MyApp(object):
  4.  
    def __init__(self, parent):
  5.  
    self.rootframe = tk.Frame(parent)
  6.  
    self.rootframe.pack()
  7.  
     
  8.  
    self.setupUI()
  9.  
     
  10.  
     
  11.  
    def setupUI(self):
  12.  
    tk.Label(self.rootframe, text='标签').pack()
  13.  
     
  14.  
     
  15.  
    if __name__ == '__main__':
  16.  
    root = tk.Tk()
  17.  
    MyApp(root) # 注意这句
  18.  
    root.mainloop()

2.直接使用root

说明:

  • self.root = parent
  • tk.Label(self.root)
 
  1.  
    import tkinter as tk
  2.  
     
  3.  
    class MyApp(object):
  4.  
    def __init__(self, parent, **kwargs):
  5.  
    self.root = parent
  6.  
    self.root.config(**kwargs)
  7.  
     
  8.  
    self.setupUI()
  9.  
     
  10.  
    def setupUI(self):
  11.  
    tk.Label(self.root, text = '标签').pack()
  12.  
     
  13.  
     
  14.  
    if __name__ == '__main__':
  15.  
    root = tk.Tk()
  16.  
    app = test(root)
  17.  
    root.mainloop()

二、继承 tk.Tk

 
  1.  
    import tkinter as tk
  2.  
     
  3.  
    class MyApp(tk.Tk):
  4.  
     
  5.  
    def __init__(self):
  6.  
    super().__init__()
  7.  
     
  8.  
    self.setupUI()
  9.  
     
  10.  
     
  11.  
    def setupUI(self):
  12.  
    tk.Label(self, text='标签').pack()
  13.  
     
  14.  
     
  15.  
    if __name__ == '__main__':
  16.  
    MyApp().mainloop()

三、继承 tk.Frame

分两种情况

1.有parent

 
  1.  
    import tkinter as tk
  2.  
     
  3.  
    class MyApp(tk.Frame):
  4.  
    def __init__(self, parent=None):
  5.  
    super().__init__(parent)
  6.  
    self.pack()
  7.  
     
  8.  
    self.setupUI()
  9.  
     
  10.  
     
  11.  
    def setupUI(self):
  12.  
    tk.Label(self, text='标签').pack()
  13.  
     
  14.  
     
  15.  
    if __name__ == '__main__':
  16.  
    MyApp(tk.Tk()).mainloop()
  17.  
    #MyApp().mainloop() # 也可以这样

注意: self.pack()

2.没有parent

 
  1.  
    import tkinter as tk
  2.  
     
  3.  
    class MyApp(tk.Frame):
  4.  
     
  5.  
    def __init__(self):
  6.  
    super().__init__()
  7.  
    self.pack()
  8.  
     
  9.  
    self.setupUI()
  10.  
     
  11.  
     
  12.  
    def setupUI(self):
  13.  
    tk.Label(self, text='标签').pack()
  14.  
     
  15.  
     
  16.  
    if __name__ == '__main__':
  17.  
    MyApp().mainloop()
 
 
本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5859475.html,如需转载请自行联系原作者
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值