python - 从 TkInter Slider 返回一个值 + 使 slider 与类水平

标签 python slider tkinter

我在打印 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/

相关文章:

python libXML2 删除项目

python - 如何在C++中使用 "in"关键字

jquery - 将 $ 符号添加到 Jquery Mobile Slider

python - 使用 Tkinter 显示 CSV

python web提取iframe(ajax)内容

python - PyQT 中显示 QDialog 后执行代码的惯用方法是什么?

javascript - 具有两个数字输入的多个 slider

jquery - Owl Carousel 自动播放无法正常工作?

python - 类型错误 : leftClick() missing 1 required positional argument: 'password'

python - 使用带有 tkinter 输入 GUI 形式的内部函数结束正在运行的函数,并在退出 GUI 时显示警告消息