Python:Tkinter OK按钮回调函数

时间:2014-11-02 13:11:07

标签: python user-interface callback tkinter

我正在使用我的第一个Python GUI并尝试修改此tkinter example,但我根本无法弄清楚如何为OK按钮编写回调函数在输入的主程序值上。

#!/usr/bin/python
# -*- coding: utf-8 -*-

from Tkinter import Tk, BOTH, StringVar, IntVar
from ttk import Frame, Button, Style, Label, Entry

class Example(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)   
        self.parent = parent
        self.initUI()

    def initUI(self):
        self.parent.title("Get Value")
        self.style = Style()
        self.style.theme_use("default")
        self.pack(fill=BOTH, expand=1)

        valueLabel = Label(self, text="Value: ")
        valueLabel.place(x=10, y=10)
        value=StringVar(None)
        value.set("this is the default value")
        valueEntry=Entry(self, textvariable=value)
        valueEntry.place(x=70, y=10)

        quitButton = Button(self, text="Quit", command=self.quit)
        quitButton.place(x=10, y=50)

        okButton = Button(self, text="OK", command=self.quit)
        okButton.place(x=120, y=50)

def main():

    root = Tk()
    root.geometry("220x100+300+300")
    app = Example(root)
    root.mainloop()

if __name__ == '__main__':
    main()  

我已经阅读了大量的教程,但没有一个能够清楚地解释这一点。从理论上讲,我应该能够使用value.get()获取所选值,但无论我把它放在哪里,我都会收到错误消息。此外,AFAIK,我应该能够使用value.set()定义默认值,但这似乎没有效果,因为当我运行程序时文本框为空。

  1. root.mainloop()终止后,将值传递给主python程序的最简单方法是什么? (实际的对话框包含几个用于输入字符串和整数值的输入框。)

    即。我希望能够使用类似的东西:

    root = Tk()
    root.geometry("220x100+300+300")
    app = Example(root)
    root.mainloop()
    print value
    print value2        
    print value3
    
  2. 如何为输入框定义默认值?

2 个答案:

答案 0 :(得分:2)

使用value更改self.value变量的每次出现。这应该修复它,并显示默认值。

更新

from Tkinter import Tk, BOTH, StringVar, IntVar
from ttk import Frame, Button, Style, Label, Entry

class Example(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)   
        self.parent = parent
        self.initUI()

    def showMe(self):
        print(self.value.get())

    def initUI(self):
        self.parent.title("Get Value")
        self.style = Style()
        self.style.theme_use("default")
        self.pack(fill=BOTH, expand=1)

        valueLabel = Label(self, text="Value: ")
        valueLabel.place(x=10, y=10)
        self.value=StringVar(None)
        self.value.set("this is the default value")
        valueEntry=Entry(self, textvariable=self.value)
        valueEntry.place(x=70, y=10)

        quitButton = Button(self, text="Quit", command=self.quit)
        quitButton.place(x=10, y=50)

        okButton = Button(self, text="OK", command=self.showMe)
        okButton.place(x=120, y=50)




def main():

    root = Tk()
    root.geometry("220x100+300+300")
    app = Example(root)
    root.mainloop()


if __name__ == '__main__':
    main()  

答案 1 :(得分:0)

你的quitButton和okButton都会调用self.quit函数。因此,当您按下确定按钮时,无论您输入的是什么值,您都会调用退出函数,该函数既有自己的问题,也超出了您的问题范围。 尝试将值定义为self.value,并使okButton调用一个函数:print self.value.get()。