def create_frames_and_buttons():
ndex = 0
i = 0
x = 0
for i in range(3):
for x in range(3):
frames_list.append(Frame(root, width = 100, height = 100))
frames_list[ndex].propagate(False)
frames_list[ndex].grid(row = i, column = x, sticky = "nsew", padx = 2, pady = 2) # add any padding you would like to space out the frames/buttons
btn_list.append(Button(frames_list[ndex], text="", font="Helvetica 16 bold",
command = lambda ndex=ndex: process_turn(ndex)))
btn_list[ndex].pack(expand=True, fill=BOTH)
x += 1
ndex += 1
i += 1
root.resizable(width=False, height=False)
create_frames_and_buttons()
总而言之,这段代码的大小正好是您想要的100x100像素。
请看下面的示例:
from tkinter import *
root = Tk()
frames_list = []
btn_list = []
turn = "X"
turnLabel = Label(root, text=turn, font="Helvetica 16 bold")
turnLabel.grid(row=3, columnspan=3)
def change_turn():
global turn
if turn == "O":
turn = "X"
turnLabel.config(text=turn)
elif turn == "X":
turn = "O"
turnLabel.config(text=turn)
def check_win():
# Horizontal wins
if btn_list[0]["text"] == btn_list[1]["text"] == btn_list[2]["text"] == "X" or btn_list[0]["text"] == btn_list[1]["text"] == btn_list[2]["text"] == "O":
print("{} wins".format(btn_list[0]["text"]))
elif btn_list[3]["text"] == btn_list[4]["text"] == btn_list[5]["text"] == "X" or btn_list[3]["text"] == btn_list[4]["text"] == btn_list[5]["text"] == "O":
print("{} wins".format(btn_list[3]["text"]))
elif btn_list[6]["text"] == btn_list[7]["text"] == btn_list[8]["text"] == "X" or btn_list[6]["text"] == btn_list[7]["text"] == btn_list[8]["text"] == "O":
print("{} wins".format(btn_list[6]["text"]))
# Vertical wins
elif btn_list[0]["text"] == btn_list[3]["text"] == btn_list[6]["text"] == "X" or btn_list[0]["text"] == btn_list[3]["text"] == btn_list[6]["text"] == "O":
print("{} wins".format(btn_list[0]["text"]))
elif btn_list[1]["text"] == btn_list[4]["text"] == btn_list[7]["text"] == "X" or btn_list[1]["text"] == btn_list[4]["text"] == btn_list[7]["text"] == "O":
print("{} wins".format(btn_list[1]["text"]))
elif btn_list[2]["text"] == btn_list[5]["text"] == btn_list[8]["text"] == "X" or btn_list[2]["text"] == btn_list[5]["text"] == btn_list[8]["text"] == "O":
print("{} wins".format(btn_list[2]["text"]))
# Diagonal wins
elif btn_list[0]["text"] == btn_list[4]["text"] == btn_list[8]["text"] == "X" or btn_list[0]["text"] == btn_list[4]["text"] == btn_list[8]["text"] == "O":
print("{} wins".format(btn_list[0]["text"]))
elif btn_list[2]["text"] == btn_list[4]["text"] == btn_list[6]["text"] == "X" or btn_list[2]["text"] == btn_list[4]["text"] == btn_list[6]["text"] == "O":
print("{} wins".format(btn_list[2]["text"]))
# If no one wins
else:
change_turn()
def process_turn(ndex):
btn_list[ndex].config(text=turn)
check_win()
def create_frames_and_buttons():
ndex = 0
i = 0
x = 0
for i in range(3):
for x in range(3):
frames_list.append(Frame(root, width = 100, height = 100))
frames_list[ndex].propagate(False)
frames_list[ndex].grid(row = i, column = x, sticky = "nsew", padx = 2, pady = 2)
btn_list.append(Button(frames_list[ndex], text="", font="Helvetica 16 bold",
command = lambda ndex=ndex: process_turn(ndex)))
btn_list[ndex].pack(expand=True, fill=BOTH)
x += 1
ndex += 1
i += 1
root.resizable(width=False, height=False)
create_frames_and_buttons()
root.mainloop()
我想确定按钮是以像素为单位的特定大小的方法是,将该按钮放在帧内,并确保帧设置为特定大小,并且按钮设置为填充该帧。
这可以很容易地转换为在您的程序中工作,并确保按钮设置为100 x 100。
这是我知道的唯一确定按钮像素大小的方法。可能还有其他选择。
首先我们需要两份清单。一个用来固定框架,一个用来固定按钮。这将使我们能够以一种简单的方式存储框架和按钮,我们可以稍后使用。
我不知道如何压缩您的
check_win()
函数,所以我只对它做一个小的更改,这样它就可以处理列表了。我们需要用按钮列表中的对应项替换a1
、a2
、a3
等的每个实例,替换为稍后将用for循环创建的索引值。然后,我们需要更改
process_turn()
函数,使其包含按钮列表中每个按钮的索引值,以便像这样向其添加一个参数。最后,我们需要在命令中创建具有正确索引的所有按钮,我们可以使用for循环来完成这项工作。2号井用于循环。
第一个循环将开始行计数,第二个for循环将开始列计数。这将创建我们的3×3网格。变量
ndex
用于跟踪每个按钮需要在按钮列表上配置的索引。总而言之,这段代码的大小正好是您想要的100x100像素。
请看下面的示例:
结果:
一个简单的方法是给按钮一个不可见的1x1像素图像。这样做时,
width
和height
属性被解释为像素(或者更准确地说,屏幕单位,也可以是点、英寸或厘米)。如果这样做,可以将
compound
设置为值“c”,表示按钮应该同时显示文本和图像,并且两者都位于窗口的中心。例如:
如果使用place方法添加按钮,则可以使用表达式:
这样,按钮在其父对象中的位置
x = 0, y = 0
创建,大小为200x30 px
相关问题 更多 >
编程相关推荐