Я создаю базовую игрушку для карандашей, чтобы познакомиться с 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
. Поэтому я попытался объявить их модульным уровнем и вызвать методы логического класса из тех, которые тоже не сработали.
В идеале, после события click, я бы ожидал вызова метода логического класса, который затем выполняет его вычисления, и вызывает соответствующий метод gui обратно, то есть set_label_text()
.
Как я могу выполнить это с помощью OO-дизайна?
Я получаю некоторые идеи от вашего ответа, но, тем не менее, этот логический код будет определен внутри класса 'Gui'. Это одна из вещей, которые я пытаюсь избежать. – Innkeeper
@Innkeeper Я попытаюсь вытащить его с помощью Mixins –
@Innkeeper Я не управлял им mixins (работал в бесконечном цикле), но управлял им через объект 'logic', передаваемый конструктору Gui. Это, вероятно, будет легче читать, а затем mixins. –