2012-07-05 54 views
0

这看起来应该非常容易,但我很挣扎。编程不是我的主要背景,所以我缺乏很多基础知识,但我正在努力学习。想要使用Tkinter按钮进行字符串输入,然后关闭按钮窗口并继续

我正在处理的问题是我想使用Tkinter按钮来显示按钮列表(当前只有一个),并且当按下其中一个按钮时,它将从该按钮输入的文本输入到一个字符串中变量,关闭按钮窗口,并继续执行代码。

这就是我已经得到了本节:

root = tk.Tk() 

    def data(name): 
     global query 
     query = name 


    B = tk.Button(root, text ='LogID', command = data('LogID')) 

    B.pack() 
    root.mainloop() 

    print query 

如果这看上去也许有点混乱或马虎,这是因为它是。

之前有代码,本节后面的代码。我想让窗口在按下按钮时关闭(root.destroy()),并让代码从'query'打印文本,所以我知道它将值传递给它。

当我运行它时,它挂在root.mainloop()部分,或似乎。我会诚实地说,我不完全理解代码中的功能,我只知道它需要它。

+0

尝试使用命令= lambda x =“LogID”:data(x)',你应该没问题:) – 2012-07-05 22:23:36

+0

谢谢,我自己在玩弄它,并得到了非常接近的工作。我发现早些时候调用Tkinter的东西搞砸了。 – Asperoth 2012-07-05 22:48:36

回答

2

因为我看到你已经在使用全局变量,
我要回答你的问题与
一个例子如何使你的应用程序Tkinter.Tk的(tkinter.Tk在Python 3)的子类。

import Tkinter as tk 

class Application(tk.Tk): 

    def __init__(self): 
     tk.Tk.__init__(self) 
     self.title('Hello world!') 
     self.data = None 

     self.helloButton = tk.Button(self, width=12, text='Hello', 
        command=lambda x='hi': self.say_hi(x)) 
     self.helloButton.grid(row=0, column=1, padx=8, pady=8) 

    def say_hi(self, x): 
     self.data = x 
     self.withdraw() 
     self.secondWin = tk.Toplevel(self) 
     self.secondWin.grid() 
     self.output = tk.Entry(self.secondWin) 
     self.output.insert(0, x) 
     self.output.grid() 
     self.quitButton = tk.Button(self.secondWin, text='Quit', bg='tan', 
            command=self.close_app) 
     self.quitButton.grid() 

    def close_app(self): 
     self.destroy() 

app = Application() 
app.mainloop() 

变量self.data可以被你的类的任何方法使用;
因此,您不必使用全局关键字。
mainloop保持您的tkinter应用程序'运行'并处理事件。
请注意,我没有销毁第一个窗口,但使用withdraw方法隐藏了它。
这只是您可能感兴趣的另一种选择。您可以使用deiconify使其可见(更多信息here)。第二个窗口是一个Toplevel小部件,这是您用来创建二级窗口的东西。

我写了一个更具教育意义的例子,可以找到here

相关问题