0

所以我正在创建一个游戏,现在我决定添加一个 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 行代码的一个片段。当我尝试运行它时,我收到此错误:

类型错误:必须使用 Button 实例作为第一个参数调用未绑定的方法 grid_configure()(改为获取 Tk 实例)

(Python 对我来说是一种新语言,很抱歉遗漏了任何明显或愚蠢的东西。我对编程也很陌生)。

4

3 回答 3

1

你想要这样的东西:

a = Button(master, text = "DOMINATE!", command = difficulty)
a.grid(row=...,column=...)

还有,不要做

a.grid(...)
a.pack(...)

在同一个小部件(甚至在同一个小部件内)上使用pack和可能会让您的计算机永远坐在那里,试图在两个几何管理器之间协商合理的布局。grid要么只使用包装,要么只使用网格。

最后,您只需要最后一个mainloop(). 你应该删除所有其他的——尽管如果你有 1200 行代码,我怀疑更正这些东西会引发其他错误。

于 2012-07-23T20:30:15.720 回答
1

主要错误来自'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')

网格放置的线使用 Tkinter 旧样式类的 Button 超类网格方法。但你似乎不需要,所以你可以这样做:

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 的网格实例。拆分创建和放置。

于 2013-12-03T08:31:43.633 回答
0

错误“必须使用 Button 实例调用未绑定的方法 grid_configure()...”来自如下所示的行:

a = Button.grid(...)

上面所做的是尝试grid在类上调用方法Button,而不是在Button类的实例上。一般来说,任何“未绑定方法”错误都意味着——你试图在类而不是实例上调用方法。

相反,您必须首先创建Button该类的实例,然后调用grid该实例。例如:

a = Button(...)
a.grid(...)

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

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

在相关说明中,根据我的经验,如果将所有布局代码(和)放在一起grid,则 GUI 代码更容易维护。对于整个应用程序,不一定全部放在一起,但至少按包含窗口分组。例如,而不是这个:packplace

a = Button(...)
a.grid(...)
b = Button(...)
b.grid(...)
...

...我建议这样做:

a = Button(...)
b = Button(...)
...
a.grid(...)
b.grid(...)

这种代码组织可以更容易地发现布局问题,例如在同一行或同一列中有多个项目等。

于 2012-07-23T21:16:59.047 回答