簡體   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