当前位置: 首页 > 面试题库 >

Tkinter中的文本输入

詹斌蔚
2023-03-14
问题内容

目标

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

为此,我有以下代码:

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 变量具有我输入的值,并从外壳程序中进行了检查。

当我试图从分配返回的字符串a.getString(),以var在shell,然后它的工作。

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

眼镜

作业系统:Linux Mint 14

Python IDLE 2.7

帮我解决这个问题。


问题答案:

您的代码流如下所示:

  • 主要作用域调用getText
  • getText创建一个takeInput对象a
  • takeInput对象初始化自身,创建标签及按钮等
  • getText返回a.getString(),返回self.string,其仍为默认值,即空字符串。
  • 主范围显示var,该值为空。

到目前为止,所有这些都发生在几纳秒的时间范围内。用户甚至还没有看到窗口。

然后root.mainloop(),主作用域调用,这最终为用户提供了与窗口进行交互的机会。但是为时已晚。var已被打印。

如果您不希望getText在用户提交文本之前不返回,则mainloop必须在内getText而不是之后进行。

from Tkinter import *

class takeInput(object):

    def __init__(self,requestMessage):
        self.root = Tk()
        self.string = ''
        self.frame = Frame(self.root)
        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.root.destroy()

    def getString(self):
        return self.string

    def waitForInput(self):
        self.root.mainloop()

def getText(requestMessage):
    msgBox = takeInput(requestMessage)
    #loop until the user makes a decision and the window is destroyed
    msgBox.waitForInput()
    return msgBox.getString()

var = getText('enter your name')
print "Var:", var


 类似资料:
  • 问题内容: 我不确定是否已经询问过此问题,但是我有多个输入框,其中包含默认文本。我不是要设置默认的文本,而是要在单击输入框时删除它。我希望能够在单击输入框后立即删除默认文本,因此用户不必这样做。我想知道是否有人可以分享一个有关如何完成此操作的快速示例,以便我可以实施。 到目前为止,我已经知道了,但是只删除了最后一个输入框文本。 问题答案: 假设您已整理好默认文本,则想在某个地方创建事件绑定,并使用

  • 我在学KINTER我有点困惑。下面的代码显示了face_recogniton()函数中的白色文本。 但文本重叠了。在显示新文本之前,如何清除它?

  • 我有以下问题。我用tkinter中的滚动条创建了一个框架。框架有一个标签,它从一个json文件中获取信息并加载到那里。代码如下: 问题是,当一个句子太长的时候,它就会出框,这很奇怪,因为我以为这些标签有一个自动系统来检测它什么时候出框。这里有一个例子: 程序从json文件中获取以下文本: 我做错了什么?提前道谢!

  • 本文向大家介绍Python | Tkinter中的文本区域和按钮,包括了Python | Tkinter中的文本区域和按钮的使用技巧和注意事项,需要的朋友参考一下 库: Tkinter Tkinter(Tk interface)是一个标准python库,用于创建简单,快速和简单的GUI应用程序。 下载Tkinter: 在本教程中,我们将创建一个标签和文本区域,并从文本区域中提取文本,然后我们将看到

  • 我有一个包含员工信息的文本文件。第一个单词是员工的姓氏,第二个单词是第一个名字。字符代码h或s告诉我他们是什么样的员工,有薪或小时。最后,字符代码后面的数字是小时工资(如果为小时工)或年薪(如果为受薪员工)。 我想对这些信息做的是扫描文本文件,根据识别的字符代码自动创建新的受薪员工对象或小时员工对象。 这些是小时雇员对象的参数。 这就是我想到的。 这段代码的问题是,我从in.nextDouble(

  • 我在用python修改文本时遇到了问题,尽管我看到很多人在使用它 我的代码:

  • 主要内容:基本属性,基本方法,Index文本索引,Tag文本标签,Mark文本标记Text 文本控件是 Tkinter 中经常使用的控件,与 Entry 控件相比,Text 控件用于显示和编辑多行文本,而 Entry 控件则适合处理单行文本。 Text 控件类似 HTML 中的 标签,允许用户以不同的样式、属性来显示和编辑文本,它可以包含纯文本或者格式化文本,同时支持嵌入图片、显示超链接以及带有 CSS 格式的 HTML 等。Text 控件的有很多的适用场景,比如显示某个产品的

  • 可以输出文本。 用法 Your browser does not support the video tag. 案例:标签标签 功能:显示输入的字母。