考虑以下使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
,因为它到目前为止超出窗口的边界。为什么会发生这种情况,我该如何解决?
答案 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 }},以便窗口保持其外观。
您可以根据需要提供按钮大小。
这些更改解决了两个问题:
代码:
false
输出:
3x3按钮矩阵
点击按钮后的
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)
文字