Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用tkinter时,如何调用另一个函数中某个函数中的复选框?_Python_Checkbox_Tkinter - Fatal编程技术网

在python中使用tkinter时,如何调用另一个函数中某个函数中的复选框?

在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

例如,我在.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.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,但效果很好。我不知道为什么它可以很好的工作,但复选框不能。