我正在創建一個基本的搖滾紙剪刀遊戲來熟悉python和tkinter。我想創建一個gui和一個邏輯類來分離兩者。但是,我似乎無法找到在python中都有效的代碼佈局,這對我來說很有意義。如何正確組織此代碼?
我想Gui
類只知道小部件並更新它們。
class Gui:
def setup(self):
root = Tk.Tk()
root.geometry("370x170")
root.resizable(width=False, height=False)
root.title("Rock, Paper, Scissors")
root.iconbitmap("Play.ico")
rock_button = Tk.Button(root, text="Rock", command=rock_clicked)
rock_button.place(width=100, height=30, x=10, y=30)
paper_button = Tk.Button(root, text="Paper", command=paper_clicked)
paper_button.place(width=100, height=30, x=10, y=70)
scissors_button = Tk.Button(root, text="Scissors", command=scissors_clicked)
scissors_button.place(width=100, height=30, x=10, y=110)
score_font = font.Font(family="Helvetica", size=20)
own_score_lbl = Tk.Label(root, text="0", relief=Tk.RIDGE, font=score_font)
own_score_lbl.place(width=50, height=110, x=120, y=30)
ai_score_lbl = Tk.Label(root, text="0", relief=Tk.RIDGE, font=score_font)
ai_score_lbl.place(width=50, height=110, x=200, y=30)
ai_choice = Tk.Label(root, relief=Tk.RIDGE)
ai_choice.place(width=100, height=110, x=260, y=30)
root.mainloop()
gui = Gui()
gui.setup()
在其他語言中,我習慣於在gui類中有一個邏輯成員變量,反之亦然。這在這裏不起作用。由於參數self
,點擊處理函數不能是邏輯類的成員。所以我試圖將它們聲明爲模塊級別,並從那些調用邏輯類的方法,這也沒有解決。理想情況下,在點擊事件之後,我希望調用一個邏輯類方法,然後進行計算,並調用適當的gui方法,即返回set_label_text()
。
我該如何用OO設計來實現?
我從你的答案中得到了一些想法,但仍然這樣,邏輯代碼將在名爲Gui的類中定義。這是我試圖避免的事情之一。 – Innkeeper
@Innkeeper我會嘗試通過使用Mixins來解決它 –
@Innkeeper我沒有通過mixins(運行到無窮循環)來管理它,但通過將'logic'對象傳遞給Gui構造函數來管理它。這可能會更容易閱讀mixin。 –