鱼C论坛

 找回密码
 立即注册
查看: 2593|回复: 4

tkinter,把root根窗口里的内容放在tk.Tk的子类

[复制链接]
发表于 2017-3-4 22:46:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 campnouw 于 2017-3-4 23:33 编辑

大家好,有两个问题吧:
        1.(问题1已经解决,看完代码就看问题2吧……)代码修改自67课的计算器,我把窗口内组件的创立写成了tk.Tk的子类,如下
  1. import tkinter as tk
  2. class MyTk(tk.Tk):
  3.     #def __init__(self):
  4.     def construct(self):
  5.         self.v1 = tk.StringVar()
  6.         self.v2 = tk.StringVar()
  7.         self.v3 = tk.StringVar()
  8.         self.frame = tk.Frame(self)
  9.         self.frame.pack(padx=10,pady=10)
  10.         self.testCMD = self.register(self.test)
  11.         self.entry1 = tk.Entry(self.frame,width=10, textvariable=self.v1, validate="key", validatecommand=(self.testCMD,'%P')).grid(row=0,column=0)
  12.         tk.Label(self.frame, text="+").grid(row=0,column=1)
  13.         self.entry2 = tk.Entry(self.frame, width=10, textvariable=self.v2, validate="key", validatecommand=(self.testCMD,'%P')).grid(row=0,column=2)
  14.         tk.Label(self.frame, text="=").grid(row=0,column=3)
  15.         self.entry3 = tk.Entry(self.frame, textvariable=self.v3, state="readonly").grid(row=0,column=4)
  16.         tk.Button(self.frame, text="计算", width=10, command=self.calc).grid(row=1,column=2)
  17.     def calc(self):
  18.         result = int(self.v1.get())+int(self.v2.get())
  19.         self.v3.set(str(result))
  20.     def test(self, content):
  21.         return content.isdigit()

  22. master = MyTk()
  23. master.construct()
  24. tk.mainloop()
复制代码


2. 以上例子中,如果把construct()函数中的内容,放到__init__(self),则无法编译通过,报错 AttributeError: 'NoneType' object has no attribute '_root',这又是为啥呢?
谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-5 09:36:29 | 显示全部楼层
因为__init__(self)里参数没有 v1,v2....
加上这些函数
妥妥的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-5 16:03:07 | 显示全部楼层
新手·ing 发表于 2017-3-5 09:36
因为__init__(self)里参数没有 v1,v2....
加上这些函数
妥妥的

没明白,如果把construct()全放到__init__()里,也就是会有self.v1 = ...和self.v2 = ...的语句啊
你说的加上这些函数,是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-6 10:58:51 | 显示全部楼层
自己顶一下……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-6 19:31:50 | 显示全部楼层
campnouw 发表于 2017-3-5 16:03
没明白,如果把construct()全放到__init__()里,也就是会有self.v1 = ...和self.v2 = ...的语句啊
你说 ...

把参数加进去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 16:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表