[英]Python GUI Programming Using Tkinter
所以我正在创建一个游戏,现在我决定添加一个GUI。 GUI代码如下所示:
master = Tk()
master.wm_title("Main Menu")
a = Button.grid(master, text = "DOMINATE!", command = difficulty)
a.grid(row = 0, column = 0)
a.pack()
mainloop()
b = Button.grid(master, text = "Patch Notes", command = changelog)
b.grid(row = 0, column = 1)
b.pack()
mainloop()
c = Button.grid(master, text = "Credits", command = credit)
c.grid(row = 1, column = 0)
c.pack()
mainloop()
d = Button.grid(master, text = "Rules", command = rules)
d.grid(row = 1, column = 1)
d.pack()
mainloop()
e = Button.grid(master, text = "Quit", command = exit)
e.grid(row = 2, column = 0)
e.pack()
mainloop()
我已经从Tkinter导入了函数*,这只是我的1200行代码的片段。 当我尝试运行它时,我收到此错误:
TypeError:unbound方法grid_configure()必须使用Button实例作为第一个参数调用(改为使用Tk实例)
(Python对我来说是一种新语言,对于遗漏任何明显或愚蠢的东西感到遗憾。我对编程也很陌生。)
你想要的东西:
a = Button(master, text = "DOMINATE!", command = difficulty)
a.grid(row=...,column=...)
另外,不要这样做
a.grid(...)
a.pack(...)
在同一个小部件(甚至在同一个小部件中)使用pack
和grid
可能会让您的计算机永远坐在那里,试图在两个几何管理器之间协商合理的布局。 要么只使用pack,要么只使用grid。
最后,您只需要最后一个mainloop()
。 你应该删除所有其他的 - 虽然你有1200行代码,我怀疑纠正这些事情会引起其他错误。
主要错误来自'master',它不是Button实例:
a = Button.grid(master, text = "DOMINATE!", command = difficulty)
改为:
a = Button(master, text = "DOMINATE!", command = difficulty)
Button.grid(master.a,row=0,column=0,rowspan=1,columnspan=1,sticky='wens')
网格放置的行使用Button超类网格方法用于Tkinter旧式类。 但你似乎不需要那样做,所以你可以这样做:
a.grid(master.self,row=0,column=0,rowspan=1,columnspan=1,sticky='wens')
做:
a = Button(master, text = "DOMINATE!", command = difficulty).grid(row=0,column=0,rowspan=1,columnspan=1,sticky='wens')
“a”将不会是稍后可调用的Button实例,因为它将是一个等于NoneType的网格实例。 拆分创建和放置。
错误“未绑定的方法grid_configure()必须使用Button实例调用...”来自如下所示的行:
a = Button.grid(...)
上面做的是尝试在Button
类上调用grid
方法,而不是在Button
类的实例上调用。 一般来说,任何“未绑定方法”错误都意味着 - 您尝试在类而不是实例上调用方法。
相反,您必须首先创建Button
类的实例,然后在实例上调用grid
。 例如:
a = Button(...)
a.grid(...)
此外,对同一个小部件使用pack
和grid
也没有意义。 使用其中一个。 如果使用grid
,则无需调用pack
。
最后, mainloop
被设计为在创建所有小部件后完全调用一次。
在相关的说明中,根据我的经验,如果将所有布局代码( grid
, pack
和place
)放在一起,GUI代码将更容易维护。 不一定是整个应用程序,但至少按包含窗口分组。 例如,而不是这样:
a = Button(...)
a.grid(...)
b = Button(...)
b.grid(...)
...
......我建议这样做:
a = Button(...)
b = Button(...)
...
a.grid(...)
b.grid(...)
这种代码组织使得更容易发现布局问题,例如在同一行或列中具有多个项目等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.