Tkinter使按钮比预期的大

时间:2019-12-20 20:33:41

标签: 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)
        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)

当我在master.geometry("600x600")中写height=200, width=200然后写self.options时,我希望整个3x3网格都适合父窗口。但是,当我运行该程序时,我只看到一个大大超出父窗口边界的大按钮,当我按下它时,我什至看不到按钮上出现的X,因为它到目前为止超出窗口的边界。为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:0)

function cIf(element,elementNumber){ if($(element + ":nth-child("+elementNumber+")" + ":hover").length != 0){ return true; }else{ return false; } } $(document).ready(function(){ $(".myNav").click(function(){ if(cIf(".myNav",1)){ alert("hi"); } }) }); 选项表示平均宽度字符数,而不是像素数。通过将宽度设置为200,您要求它的宽度为200个字符

将按钮配置为具有图像时,width仅解释为像素。

答案 1 :(得分:0)

因此,我使用了<Button-1>事件格式,其中在小部件上按下鼠标按钮(按钮1是最左侧的鼠标按钮)时,鼠标指针的当前位置(相对于小部件)为在传递给回调的事件对象的x和y成员中提供。

我没有给主窗口任何固定的geometry(宽度和高度),因为该窗口将根据其中的窗口小部件自行调整大小,然后将resizable选项设置为{{1 }},以便窗口保持其外观。

您可以根据需要提供按钮大小。

这些更改解决了两个问题:

  1. 按钮尺寸问题
  2. 按钮事件问题

代码:

false

输出:

  

3x3按钮矩阵

button matrix

  

点击按钮后的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) 文字

text in button