我在打印 slider 的值时遇到问题。我在 slider 下方创建了一个按钮来执行此操作,但它在按下之前打印,按下时不打印。
我也有使 slider 水平的问题。我知道它是“orient=HORIZONTAL”,当它不在类里面时它可以工作,但当它在类里面时它会给我带来麻烦。
这是代码,一如既往,非常感谢! :)
import Tkinter as tki # Tkinter -> tkinter in Python 3
import tkMessageBox
class GUI(tki.Tk):
def __init__(self):
tki.Tk.__init__(self)
self.wm_title("Menu Title")
RWidth=500
RHeight=300
self.geometry(("%dx%d")%(RWidth,RHeight))
menubar = tki.Menu(self)
# create a pulldown menu, and add it to the menu bar
menu0 = tki.Menu(menubar, tearoff=0)
menu0.add_command(label="Run Slider", command=self.slider_prompt)
menu0.add_separator()
menu0.add_command(label="Exit", command=self.quit)
menubar.add_cascade(label="Slider", menu=menu0)
# display the menu
self.config(menu=menubar)
def slider_prompt(self, msg='This is a slider'):
slider_window= self.top = tki.Toplevel(self)
slider_window.title("Slider Title")
RWidth=300
RHeight=200
slider_window.geometry(("%dx%d")%(RWidth,RHeight))
label0 = tki.Label(slider_window, text=msg)
label0.pack()
slider = tki.Scale(slider_window, from_=100, to=1000) # have to make horizontal
slider.pack()
#put button here that starts the program (pass the slider value)
button_cheat = tki.Button( slider_window, text='Print Value', command=self.print_slide_value(slider.get()) )
button_cheat.pack()
button_close = tki.Button(slider_window, text='Exit', command=lambda: self.top.destroy())
button_close.pack()
def print_slide_value(self, slider_value):
print slider_value
gui = GUI()
gui.mainloop()
最佳答案
当您使用命令参数时,您必须传递对可调用对象的引用。事件发生后将调用的函数。您所做的是将 self.print_slide_value(slider.get())
的结果传递给那里,即 None
。
而是这样做:
def print_slide_value():
print slider.get()
button_cheat = tki.Button(slider_window, text='Print Value', command=print_slide_value)
我对此没有任何问题:
slider = tki.Scale(slider_window, from_=100, to=1000, orient=tki.HORIZONTAL)
关于python - 从 TkInter Slider 返回一个值 + 使 slider 与类水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722660/