访问在对话框tkinter中输入的数据

时间:2012-12-26 21:36:52

标签: python tkinter

我正在编写一个简单的GUI,使用python中的按钮小部件输入数字。我调用一个按钮,当按下时调用一个名为NumLibs的函数。 Numlib从我的调用MyDialog访问数据。我希望在我的主python程序中访问存储在d.result中的值,但我无法这样做。有人可以帮我查看这个值吗? 请找我附上的代码。

**from Tkinter import *
import tkSimpleDialog
import sys
import os
import string
def callback():
    print "called the callback!"
class MyDialog(tkSimpleDialog.Dialog):
    def body(self, master):
        Label(master, text="No.of Libraries :").grid(row=0)
        self.e1 = Entry(master)
        self.e1.grid(row=0, column=1)
        return self.e1 # initial focus
    def apply(self):
            first = string.atoi(self.e1.get())
        self.result=first
            #print first # or something

def NumLib():
    d=MyDialog(root)
    return d.result



root = Tk()
root.title("SIMKIT")
toolbar = Frame(root, width=300, height=300, bg="grey", bd=1, relief="sunken")
b = Button(toolbar, text="Enter No. of Libraries", command=NumLib)
b.pack(padx=10, pady=10)
toolbar.pack()
root.mainloop()**

提前致谢。

此致 Kaustubh

2 个答案:

答案 0 :(得分:1)

您必须将对话框的结果设置为主程序实例的属性。通过这种方式,您可以访问它 例如,以下类读取输入的值并将其写入按钮

class MyDialog(tkSimpleDialog.Dialog):
    -----  same code ---------


class MyToolbar(Frame):

    def __init__(self, *args, **kargs):
        Frame.__init__(self, *args, **kargs)
        self.b = Button(self, text="Enter No. of Libraries", command=self.NumLib)
        self.b.pack(padx=10, pady=10)
        self.pack()

    def NumLib(self):
        d = MyDialog(root)
        self.result = d.result            # you have your value in this instance variable
        self.b.config(text= self.result)  # for example I can use it to change the button label


root = Tk()
root.title("SIMKIT")
toolbar = MyToolbar(root, width=300, height=300, bg="grey", bd=1, relief="sunken")
root.mainloop()

答案 1 :(得分:0)

在我看来,MyDialogresult仅在apply()中设置 - 按下按钮时可能会或可能不会调用MyDialog.result,因此变量NumLib()可能不存在当MyDialog.result被召唤时!

尝试在按下按钮之前将{{1}}的值设置为某个虚拟值,可能在构造函数中或类的顶级,并查看会发生什么。