为什么我从一开始就获得2个tkinter窗口?

时间:2017-10-25 00:55:56

标签: python tkinter

我尝试使用创建另一个窗口的按钮创建一个窗口。

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()

没有点击按钮,我得到两个,而不是一个带按钮的窗口。

The two windows.png

我做错了什么?

2 个答案:

答案 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()