我尝试使用创建另一个窗口的按钮创建一个窗口。
m = Tk()
def new(a,b):
r = Tk()
r.geometry(str(a) + "x" + str(b) + "+0+0")
b = Button(m, text="Click", command=new(100,300)).place(x=0,y=0)
m.mainloop()
没有点击按钮,我得到两个,而不是一个带按钮的窗口。
我做错了什么?
答案 0 :(得分:0)
你在构建new
时从调用 Button
(技术上,之前构建Button
以来new
1}}必须完成运行,因此它的返回值可以作为command
参数传递),而不是作为回调传递给点击时调用。
你需要传递一个(无参数)可调用command
而不调用它,例如使用lambda
打包new
电话,从而将其推迟到调用lambda
之前:
b = Button(m, text="Click", command=lambda: new(100,300)).place(x=0,y=0)
答案 1 :(得分:0)
在您的Button通话中,您调用了新功能。该函数正在创建一个新的Tk实例。这就是你打开两个窗户的原因。
假设您想在第一个Tk实例上运行几何操作,只需将Tk对象传递给新函数。
你可以这样做:
from tkinter import *
m = Tk()
def new(a, b, r):
r.geometry(str(a) + "x" + str(b) + "+0+0")
b = Button(m, text="Click", command=new(100, 300, m)).place(x=0, y=0)
m.mainloop()