我正在编写一个简单的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
答案 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}}的值设置为某个虚拟值,可能在构造函数中或类的顶级,并查看会发生什么。