0

我正在编写一个简单的 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()**

提前致谢。

问候,考斯图布

4

2 回答 2

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()
于 2012-12-26T22:32:50.687 回答
0

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

尝试MyDialog.result在按下按钮之前将 的值设置为某个虚拟值,可能在构造函数中或在类的顶层中,看看会发生什么。

于 2012-12-26T22:13:08.840 回答