在python中使用tkinter时,如何调用另一个函数中某个函数中的复选框?
例如,我在.py文件中有以下代码:在python中使用tkinter时,如何调用另一个函数中某个函数中的复选框?,python,checkbox,tkinter,Python,Checkbox,Tkinter,例如,我在.py文件中有以下代码: import tkinter def main(): top = tkinter.Tk() top.title("Main") Var = tkinter.IntVar() CheckBox = tkinter.Checkbutton(top, text="test", variable=Var) CheckBox.grid(column=1, row=1) startButton = tkinter.But
import tkinter
def main():
top = tkinter.Tk()
top.title("Main")
Var = tkinter.IntVar()
CheckBox = tkinter.Checkbutton(top, text="test", variable=Var)
CheckBox.grid(column=1, row=1)
startButton = tkinter.Button(top, text="Start", command=lambda: a(Var))
startButton.grid(column=1, row=2)
top.mainloop()
def a(Var):
print(Var.get())
在另一个b.py文件中,我有以下代码
import a
import tkinter
top = tkinter.Tk()
top.title("Test")
def run():
a.main()
startButton = tkinter.Button(top, text="Start", command=run)
startButton.grid(column=0, row=0)
top.mainloop()
我所期望的是,当我选中复选框时,它将打印1,如果不选中,它将打印0。
但是,无论我是否选中该复选框,它都将始终打印0。如何使复选框工作?
Var
是a.py
本地的,因此您必须找到使其可访问b.py
。简单的导入a
是不够的,除非以a.py的方式定义Var:
a.py
import tkinter
# Must be done here otherwise we can not declare Var above
top = tkinter.Tk()
# Make Var available to b.py
Var = tkinter.IntVar()
def main():
global Var
global top
#top = tkinter.Tk()
top.title("Fix Ratio")
Var = tkinter.IntVar()
CheckBox = tkinter.Checkbutton(top, text="test", variable=Var)
CheckBox.grid(column=1, row=1)
startButton = tkinter.Button(top, text="Start", command=lambda: a(Var))
startButton.grid(column=1, row=2)
#top.mainloop()
def a(Var):
print(Var.get())
b.py
import tkinter
# Must be done here otherwise we can not declare Var above
top = tkinter.Tk()
# Make Var available to b.py
Var = tkinter.IntVar()
def main():
global Var
global top
#top = tkinter.Tk()
top.title("Fix Ratio")
Var = tkinter.IntVar()
CheckBox = tkinter.Checkbutton(top, text="test", variable=Var)
CheckBox.grid(column=1, row=1)
startButton = tkinter.Button(top, text="Start", command=lambda: a(Var))
startButton.grid(column=1, row=2)
#top.mainloop()
def a(Var):
print(Var.get())
如果您希望在实际运行的程序中有两个单独的窗口,则需要将top
重命名为b.py
中的其他窗口:
import tkinter
import a # Var now is accessible from b.py
to = tkinter.Tk()
to.title("Conditioning")
def run():
a.main()
startButton = program.tkinter.Button(to, text="Start", command=run)
startButton.grid(column=0, row=0)
to.mainloop()
演示:
以下是在取消选中复选按钮以及稍后选中复选按钮时运行b.py over程序的屏幕截图:
Var
对于a.py
是本地的,因此您必须找到使其可访问b.py
。简单的导入a
是不够的,除非以a.py的方式定义Var:
a.py
import tkinter
# Must be done here otherwise we can not declare Var above
top = tkinter.Tk()
# Make Var available to b.py
Var = tkinter.IntVar()
def main():
global Var
global top
#top = tkinter.Tk()
top.title("Fix Ratio")
Var = tkinter.IntVar()
CheckBox = tkinter.Checkbutton(top, text="test", variable=Var)
CheckBox.grid(column=1, row=1)
startButton = tkinter.Button(top, text="Start", command=lambda: a(Var))
startButton.grid(column=1, row=2)
#top.mainloop()
def a(Var):
print(Var.get())
b.py
import tkinter
# Must be done here otherwise we can not declare Var above
top = tkinter.Tk()
# Make Var available to b.py
Var = tkinter.IntVar()
def main():
global Var
global top
#top = tkinter.Tk()
top.title("Fix Ratio")
Var = tkinter.IntVar()
CheckBox = tkinter.Checkbutton(top, text="test", variable=Var)
CheckBox.grid(column=1, row=1)
startButton = tkinter.Button(top, text="Start", command=lambda: a(Var))
startButton.grid(column=1, row=2)
#top.mainloop()
def a(Var):
print(Var.get())
如果您希望在实际运行的程序中有两个单独的窗口,则需要将top
重命名为b.py
中的其他窗口:
import tkinter
import a # Var now is accessible from b.py
to = tkinter.Tk()
to.title("Conditioning")
def run():
a.main()
startButton = program.tkinter.Button(to, text="Start", command=run)
startButton.grid(column=0, row=0)
to.mainloop()
演示:
以下是在取消选中复选按钮以及稍后选中复选按钮时运行b.py over程序的屏幕截图:
这是因为您有两个
Tk
实例。Tkinter设计为一次只拥有一个实例。每个实例都有自己的内部名称空间,因此一个实例中的变量对另一个实例不可见 这是因为您有两个Tk
实例。Tkinter设计为一次只拥有一个实例。每个实例都有自己的内部名称空间,因此一个实例中的变量对另一个实例不可见 它可以工作,但在按下第一个窗口上的开始按钮之前,会出现第二个tkinter窗口。是否可以使其在按下第一个窗口上的“开始”按钮后再显示第二个窗口,而不是先显示然后更新?因为当控制更多的窗口时,让它们先出现并不是件好事。谢谢,顺便说一句,在我自己的程序中,我也使用了与checkbox相同的函数tkinter.Entry,但效果很好。我不知道为什么它可以正常工作,但复选框不能。它可以工作,但在按下第一个窗口上的开始按钮之前,会出现第二个tkinter窗口。是否可以使其在按下第一个窗口上的“开始”按钮后再显示第二个窗口,而不是先显示然后更新?因为当控制更多的窗口时,让它们先出现并不是件好事。谢谢,顺便说一句,在我自己的程序中,我也使用了与checkbox相同的函数tkinter.Entry,但效果很好。我不知道为什么它可以很好的工作,但复选框不能。