Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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 比例函数未将数字输出到变量?_Python_Tkinter_Global Variables_Scrollbar - Fatal编程技术网

Python 比例函数未将数字输出到变量?

Python 比例函数未将数字输出到变量?,python,tkinter,global-variables,scrollbar,Python,Tkinter,Global Variables,Scrollbar,因此,出于某种原因,tkinter中的scale函数不希望输出刻度上的数字。我得到的不是0.0就是什么都没有。这似乎与GUI和通过GUI调用函数有关。用python 3.4编写并运行 from tkinter import * from tkinter import ttk from tkinter import messagebox iterations=30 def settings(): global itervar, iterscale sGui = Tk()

因此,出于某种原因,tkinter中的scale函数不希望输出刻度上的数字。我得到的不是0.0就是什么都没有。这似乎与GUI和通过GUI调用函数有关。用python 3.4编写并运行

from tkinter import *
from tkinter import ttk
from tkinter import messagebox

iterations=30

def settings():
    global itervar, iterscale
    sGui = Tk()
    itervar = DoubleVar()

    iterscale = Scale(sGui, orient="horizontal", from_=1, to=1000, variable=itervar)
    iterscale.pack()

    iterbutton = Button(sGui, text="Save Settings", command=saveSettings)
    iterbutton.pack()

    sGui.mainloop()

def saveSettings():
    global iterations
    iterations = itervar.get()
    print(iterations)

def doNothing():
    pass

def main():
    global root, version
    root= Tk()

    menu = Menu(root)
    root.config(menu=menu)

    fileMenu = Menu(menu)
    menu.add_cascade(label="File", menu=fileMenu)
    fileMenu.add_command(label="Quit", command=quit)

    benchmarkMenu = Menu(menu)
    menu.add_cascade(label="Benchmark", menu=benchmarkMenu)
    benchmarkMenu.add_command(label="Run [All]", command=doNothing)
    benchmarkMenu.add_separator()
    benchmarkMenu.add_command(label="Settings", command=settings)

    root.mainloop()

#Main
main()
我自己尝试了
settings
saveSettings
功能,它们工作得很好,但是当我通过GUI调用它时,它似乎不起作用


如果对这个问题有任何想法,我唯一的解决办法就是将
设置
功能和
保存设置
功能放在不同的文件中,然后使用
os.startfile(“etc.”)从外部运行该文件
最小修复:更改此设置

itervar = DoubleVar()
为此:

itervar = DoubleVar(sGui)
由于您有两个根应用程序(
root
sGui
都是
Tk
的实例),
itervar
的隐含父窗口小部件是第一个创建的,即
root
,因此当您将它指定为完全不同的应用程序的变量时,tkinter会感到困惑

但我强烈建议使用
顶级
实例使windows成为同一程序的一部分:

sGui = Toplevel(root)
...
#sGui.mainloop() #no longer need this

尽管您希望能够在没有主窗口的情况下运行设置窗口,但您可以考虑将所有可见的窗口“代码> Toplevel < /代码> s,并使实际的根隐藏:

                # I'm not sure if you want to call it this
abs_root = Tk() # but you are already using root
abs_root.withdraw() #hide the window
然后使
root=Toplevel(abs\u root)


您可以使用
将所有变量逐步淘汰。直接使用标尺获取

iterations = iterscale.get()

最小修复:更改此选项

itervar = DoubleVar()
为此:

itervar = DoubleVar(sGui)
由于您有两个根应用程序(
root
sGui
都是
Tk
的实例),
itervar
的隐含父窗口小部件是第一个创建的,即
root
,因此当您将它指定为完全不同的应用程序的变量时,tkinter会感到困惑

但我强烈建议使用
顶级
实例使windows成为同一程序的一部分:

sGui = Toplevel(root)
...
#sGui.mainloop() #no longer need this

尽管您希望能够在没有主窗口的情况下运行设置窗口,但您可以考虑将所有可见的窗口“代码> Toplevel < /代码> s,并使实际的根隐藏:

                # I'm not sure if you want to call it this
abs_root = Tk() # but you are already using root
abs_root.withdraw() #hide the window
然后使
root=Toplevel(abs\u root)


您可以使用
将所有变量逐步淘汰。直接使用标尺获取

iterations = iterscale.get()

为什么在
settings
函数中调用
sGui.mainloop()
?!?!。。。。哦,这是另一个
Tk
实例。。。好的,您需要将其更改为
Toplevel
,这样它将作为主程序的另一个窗口存在。topmost只允许该窗口位于主GUI的前面。在一个程序中,您不应该有多个根
Tk()
窗口,而且您不能有多个
mainloop
调用。为什么要在
settings
函数中调用
sGui.mainloop()
?以便在运行时设置窗口保持打开状态?!?!。。。。哦,这是另一个
Tk
实例。。。好的,您需要将其更改为
Toplevel
,这样它将作为主程序的另一个窗口存在。topmost只允许该窗口位于主GUIFWIW前面,一个程序中不应该有多个root
Tk()
窗口,并且不能有多个
mainloop
调用。