比例功能不输出数字到变量?

时间:2016-04-18 16:15:26

标签: python tkinter global-variables scrollbar

因此,由于某种原因,tkinter中的缩放功能并不想在比例尺上输出数字。我收到的只是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()

我已经尝试了自己的settingssaveSettings函数并且它们工作正常,但是当我通过GUI调用它时,它似乎无法工作。

关于该问题的任何想法,我唯一的解决方案是将settings函数和saveSettings函数放在不同的文件中,然后使用os.startfile("etc...")

在外部运行该文件

1 个答案:

答案 0 :(得分:3)

最小修复:更改此

itervar = DoubleVar()

到此:

itervar = DoubleVar(sGui)

因为您有两个根应用程序(rootsGui都是Tk的实例)itervar的隐含父窗口小部件是第一个创建的,root 1}}所以当你把它指定为完全不同的应用程序的变量时,tkinter会感到困惑。

但我高度建议使用Toplevel实例让Windows成为同一程序的一部分:

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

虽然如果您希望能够在没有主要设置窗口的情况下运行设置窗口,您可以考虑制作所有可见窗口Toplevel并隐藏实际根目录:

                # 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_root)

您可以直接使用.get缩放比例来逐步淘汰变量:

iterations = iterscale.get()