Python 3.4.3 tkinter – 程序在声明IntVar或任何其他tkinter数据类型时冻结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python 3.4.3 tkinter – 程序在声明IntVar或任何其他tkinter数据类型时冻结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2081字,纯文字阅读大概需要3分钟。
内容图文
上一个主题:Python 3.4 tkinter checkbutton variable handling not working / responding
在长线程之后,问题似乎与root.mainloop()运行之前的IntVar声明有关.显然,一旦进行语法更改,前一个线程的代码就可以使用Python 2.6.6(感谢PM 2Ring).您可以在上一个主题中看到完整代码.这是一个(粗略的)Minimal,Complete和Verifiable示例:
import tkinter as tk
class Thing(tk.Frame):
def Switch(self):
if self.anyVar.get():
state = "disabled"
else:
state = "normal"
print(state)
self.entry.configure(state=state)
def createWidgets(self):
### This is the problem.
print("testbefore")
self.anyVar = tk.IntVar()
print("testafter")
### End of problem. testafter is never printed. BUT WHY?!?!
tk.Label(self,text="Test",font=("Times New Roman",15)).grid(row=0,column=0,sticky="W",padx=5,pady=5)
self.box = tk.Checkbutton(self,variable=self.anyVar,command=self.Switch)
self.box.grid(row=1,column=1,sticky="W",padx=0,pady=5)
self.entry = tk.Entry(self,width=2)
self.entry.grid(row=2,column=1,sticky="W",padx=2,pady=5)
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.pack()
self.parent = parent
self.createWidgets()
class Framework(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.instances = []
self.parent = parent
thing = Thing(self)
self.instances.append(thing)
def Activity(self):
self.Clear()
self.instances[0].pack()
def Initialise(window):
window.master = tk.Frame(window)
window.master.grid()
window.instances = Framework(window.master)
window.instances.grid()
root = tk.Tk()
Initialise(root)
root.mainloop()
root.destroy()
代码将执行,直到达到self.anyVar = tk.IntVar(),此时程序冻结但没有给出错误消息.永远不会打印“testafter”.知道为什么会这样吗?谢谢.
解决方法:
(注意:我的原始答案与网格和包的使用有关.答案是错误的.这是正确的答案)
你偶然发现了一个在python 2.6中不存在的非常模糊的边缘情况,但至少存在于某些版本的python 3中.
我在3.4上测试它.在该版本中,在变量处理代码中引入了一些新代码.您的代码会导致此新代码进入无限循环.问题围绕您选择使用master作为widget属性的名称.这是您要覆盖的内置属性,导致代码进入无限循环.
解决方法很简单:将window.master重命名为除master之外的任何其他内容.例如:
window._master = tk.Frame(window)
内容总结
以上是互联网集市为您收集整理的Python 3.4.3 tkinter – 程序在声明IntVar或任何其他tkinter数据类型时冻结全部内容,希望文章能够帮你解决Python 3.4.3 tkinter – 程序在声明IntVar或任何其他tkinter数据类型时冻结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。