繁体   English   中英

使用Tkinter进行Python GUI编程

[英]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(...)

在同一个小部件(甚至在同一个小部件中)使用packgrid可能会让您的计算机永远坐在那里,试图在两个几何管理器之间协商合理的布局。 要么只使用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(...)

此外,对同一个小部件使用packgrid也没有意义。 使用其中一个。 如果使用grid ,则无需调用pack

最后, mainloop被设计为在创建所有小部件后完全调用一次。

在相关的说明中,根据我的经验,如果将所有布局代码( gridpackplace )放在一起,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM