因此,由于某种原因,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()
我已经尝试了自己的settings
和saveSettings
函数并且它们工作正常,但是当我通过GUI调用它时,它似乎无法工作。
关于该问题的任何想法,我唯一的解决方案是将settings
函数和saveSettings
函数放在不同的文件中,然后使用os.startfile("etc...")
答案 0 :(得分:3)
最小修复:更改此
itervar = DoubleVar()
到此:
itervar = DoubleVar(sGui)
因为您有两个根应用程序(root
和sGui
都是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()