【发布时间】:2021-03-09 22:12:19
【问题描述】:
我已经开始用 Python 为 Tkinter 制作一个井字游戏。基本上在这一点上,它并不需要获胜,而只是具有基本功能。左键单击放置一个“X”,右键单击放置一个“O”。按“C”应该清除电路板,并且应该使用标签和绑定来完成。我在显示“X”和“O”时遇到了问题,我确实画了板。我尝试单击第一行,但没有任何反应。
它应该像这样工作:https://youtu.be/0x6HKuyXAuU
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Tic Tac Toe")
message = StringVar()
# This is the portion that draws out the grid used in Tic Tac Toe
label1 = ttk.Label(root, text="")
label1.grid(row=1, column=0)
label2 = ttk.Label(root, text="|")
label2.grid(row=1, column=1)
label3 = ttk.Label(root, text="")
label3.grid(row=1, column=2)
label4 = ttk.Label(root, text="|")
label4.grid(row=1, column=3)
label5 = ttk.Label(root, text="-")
label5.grid(row=4, column=1)
label6 = ttk.Label(root, text="-")
label6.grid(row=4, column=2)
label7 = ttk.Label(root, text="-")
label7.grid(row=4, column=3)
label8 = ttk.Label(root, text="-")
label8.grid(row=4, column=4)
label9 = ttk.Label(root, text=" ")
label9.grid(row=5, column=0)
label10 = ttk.Label(root, text="|")
label10.grid(row=5, column=1)
label11 = ttk.Label(root, text=" ")
label11.grid(row=5, column=2)
label12 = ttk.Label(root, text="|")
label12.grid(row=5, column=3)
label13 = ttk.Label(root, text="-")
label13.grid(row=6, column=1)
label14 = ttk.Label(root, text="-")
label14.grid(row=6, column=2)
label15 = ttk.Label(root, text="-")
label15.grid(row=6, column=3)
label16 = ttk.Label(root, text="-")
label16.grid(row=6, column=4)
label17 = ttk.Label(root, text=" ")
label17.grid(row=7, column=0)
label18 = ttk.Label(root, text="|")
label18.grid(row=7, column=1)
label19 = ttk.Label(root, text=" ")
label19.grid(row=7, column=2)
label20 = ttk.Label(root, text="|")
label20.grid(row=7, column=3)
#This is the code that draws out the O and X in this the first row
label21 = ttk.Label(root, text="")
label21.grid(row=1, column=0)
label21.bind("<Button-1>", lambda e: message.set("X"))
label21.bind("<Button-3>", lambda e: message.set("O"))
label22 = ttk.Label(root, text="")
label22.grid(row=1, column=1)
label22.bind("<Button-1>", lambda e: message.set("X"))
label22.bind("<Button-3>", lambda e: message.set("O"))
label22.grid(row=1, column=3)
label22.bind("<Button-1>", lambda e: message.set("X"))
label22.bind("<Button-3>", lambda e: message.set("O"))
root.mainloop()
【问题讨论】:
-
你为什么使用标签而不是按钮?有具体原因吗?您还知道您实际上没有在任何标签中使用
message。 -
我们的老师告诉我们不要使用按钮,只使用标签和装订。
-
我编辑了我的答案以使用按钮。顺便说一句,如果您使用标签,则必须添加边框,以便标签看起来不像 1。按钮没有这个问题。
标签: python user-interface tkinter computer-science bind