Skip to main content
 首页 » 编程设计

python之Tkinter 中的文本输入

2025年05月04日11exmyth

目标

我正在尝试编写一个基本文件,我可以在所有其他程序中导入该文件,该文件将具有一个简单的功能,该功能将从用户那里获取输入,然后将其返回。

代码

为此,我有以下代码:

class takeInput(object): 
 
    def __init__(self,requestMessage,parent): 
 
        self.string = '' 
        self.frame = Frame(parent) 
        self.frame.pack()         
        self.acceptInput(requestMessage) 
 
    def acceptInput(self,requestMessage): 
 
        r = self.frame 
 
        k = Label(r,text=requestMessage) 
        k.pack(side='left') 
        self.e = Entry(r,text='Name') 
        self.e.pack(side='left') 
        self.e.focus_set() 
        b = Button(r,text='okay',command=self.gettext) 
        b.pack(side='right') 
 
    def gettext(self): 
        self.string = self.e.get() 
        self.frame.destroy() 
        print self.string 
 
    def getString(self): 
        return self.string 
 
def getText(requestMessage,parent): 
    global a 
    a = takeInput(requestMessage,parent) 
    return a.getString() 

我还添加了一些脚本级别的代码来测试这个:

root = Tk() 
 
getText('enter your name',root) 
 
var = a.getString() 
 
print var 
 
root.mainloop() 

真正让我困惑的是:

  1. var 没有我输入的值 它有空字符串 ''
  2. a.string 变量具有我输入的值,我从 shell 中检查了它。

另外 当我尝试将从 a.getString() 返回的字符串分配给 shell 中的 var 时,它起作用了。

注意 我是 Tkinter 编程的新手,并不完全理解 mainloop() 的工作原理。所以也许这就是问题所在。但我不确定。

规范

操作系统:Linux Mint 14

Python 空闲 2.7

请帮我解决这个问题。

请您参考如下方法:

正如其他答案所说,您在进入主循环之前打印 var,也就是说,在您的窗口实际运行之前,您的程序正在等待用户输入。

您可以依靠 tkSimpleDialog 系列来获取您的输入:

import Tkinter 
import tkSimpleDialog 
 
root = Tkinter.Tk() 
var = tkSimpleDialog.askstring("Name prompt", "enter your name") 
print var 

如果您想按照自己的方式进行,可以从“确定”按钮回调(在您的情况下为 gettext)执行打印。您还可以在按下“确定”时生成一个虚拟事件,并在您的主程序中绑定(bind)到该事件 (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/virtual-events.html)