Python 3.x Tkinter使按钮比预期的大得多
考虑以下代码,该代码生成3x3个按钮网格:Python 3.x Tkinter使按钮比预期的大得多,python-3.x,tkinter,Python 3.x,Tkinter,考虑以下代码,该代码生成3x3个按钮网格: import tkinter as tk class Game: def __init__(self, master): self.master = master master.geometry("600x600") self.options = dict(font=("Courier 14", 30), fg="black", height=200, width=200) s
import tkinter as tk
class Game:
def __init__(self, master):
self.master = master
master.geometry("600x600")
self.options = dict(font=("Courier 14", 30), fg="black", height=200, width=200)
self.buttons = []
for r in range(3):
self.buttonrow = []
self.buttons.append(self.buttonrow)
for c in range(3):
self.button = tk.Button(master, command=lambda r=r, c=c: self.response(r, c), **self.options)
self.button.grid(row=r, column=c)
self.buttonrow.append(self.button)
master.mainloop()
def response(self, row, col):
self.buttons[row][col].config(text="X", state=tk.DISABLED)
if __name__ == "__main__":
root = tk.Tk()
Game(root)
当我在
self.options
中写入master.geometry(“600x600”)
,然后写入height=200,width=200
时,我希望整个3x3网格都适合父窗口。然而,当我运行这个程序时,我只看到一个巨大的按钮超出父窗口的边界,当我按下它时,我甚至看不到按钮上出现的X
,因为它远远超出了窗口的边界。为什么会发生这种情况?如何解决?宽度选项表示平均宽度字符的数量,而不是像素的数量。通过将宽度设置为200,您请求的宽度为200个字符
将按钮配置为具有图像时,宽度
仅解释为像素 因此我使用了
事件格式,当鼠标按钮(按钮1是最左边的鼠标按钮)被按下在小部件上时,鼠标指针的当前位置(相对于小部件)在传递给回调的事件对象的x和y成员中提供
我没有给主窗口提供任何固定的几何图形
(宽度和高度),因为窗口将根据其内部的小部件调整自身大小,然后将可调整大小
选项设置为假
,以便窗口保持其外观
您可以根据需要提供按钮的尺寸
这些变化解决了两个问题:
按钮大小问题
按钮事件问题
代码:
import tkinter as tk
class Game:
def __init__(self, master):
self.master = master
self.master.resizable(0,0)
# row index
for row in range(3):
# col index
for col in range(3):
self.button = tk.Button(master, width=10, height=5)
self.button.grid(row=row, column=col, padx=8, pady=8, ipadx=10, ipady=4)
self.button.bind("<Button-1>", self.callback)
master.mainloop()
def callback(self, event):
# get the clicked button
clicked_btn = event.widget
text_at_row_col = clicked_btn.config(text='X', state='disabled')
if __name__ == "__main__":
root = tk.Tk()
Game(root)
将tkinter作为tk导入
班级游戏:
定义初始(自我,主):
self.master=master
self.master.可调整大小(0,0)
#行索引
对于范围(3)中的行:
#col索引
对于范围(3)中的列:
self.button=tk.button(主控,宽度=10,高度=5)
self.button.grid(行=行,列=列,padx=8,pady=8,ipadx=10,ipady=4)
self.button.bind(“,self.callback)
master.mainloop()
def回调(自身、事件):
#点击按钮
单击了\u btn=event.widget
text\u at_row\u col=单击了\u btn.config(text='X',state='disabled')
如果名称=“\uuuuu main\uuuuuuuu”:
root=tk.tk()
游戏(根)
输出:
import tkinter as tk
class Game:
def __init__(self, master):
self.master = master
self.master.resizable(0,0)
# row index
for row in range(3):
# col index
for col in range(3):
self.button = tk.Button(master, width=10, height=5)
self.button.grid(row=row, column=col, padx=8, pady=8, ipadx=10, ipady=4)
self.button.bind("<Button-1>", self.callback)
master.mainloop()
def callback(self, event):
# get the clicked button
clicked_btn = event.widget
text_at_row_col = clicked_btn.config(text='X', state='disabled')
if __name__ == "__main__":
root = tk.Tk()
Game(root)
3x3按钮矩阵
单击按钮时,X
文本
谢谢!有没有办法计算一个字符有多少像素宽?如果我能计算出这个值,我就可以在父窗口中设置按钮。