【问题标题】:How can I have multiple text entry variables?我怎样才能有多个文本输入变量?
【发布时间】:2019-11-21 00:00:08
【问题描述】:

我在 python 中遇到问题,我正在创建用户名/密码系统,但我不能在输入框中输入多个变量。

问题来了:

mEntry1 = Entry(mGui, textvariable = ment).grid(column = 0, row = 2, sticky = W)
mEntry2 = Entry(mGui, textvariable = ment).grid(column = 0, row = 4, sticky = W)

输入框总是有相同的文字,我不能更改 ment 或 textvariable 否则我会出错。如何将输入分配给不同的变量?

【问题讨论】:

  • 你真的需要使用 textvariables,还是你只认为你需要? 使用文本变量是很正常的,除非您需要它们的特殊行为(例如跟踪,或将两个小部件捆绑在一起)

标签: python tkinter


【解决方案1】:

两个问题:

  • 如果您在同一行分配一个小部件和grid,则变量将为None,因为这是grid 返回的内容。在不同的行上分配和网格。
  • 每个条目都应该有一个单独的文本变量。

mEntry1 = Entry(mGui, textvariable = ment1)
mEntry2 = Entry(mGui, textvariable = ment2)
mEntry1.grid(column = 0, row = 2, sticky = W)
mEntry2.grid(column = 0, row = 4, sticky = W)

额外的样式提示:尝试选择反映 UI 元素用途的变量名称。例如:

username_entry = Entry(mGui, textvariable = username_var)
password_entry = Entry(mGui, textvariable = password_var)
username_entry.grid(column = 0, row = 2, sticky = W)
password_entry.grid(column = 0, row = 4, sticky = W)

这将更容易识别哪些变量做了什么。当您在六个月后回来添加新功能时,您会感谢过去的自己让事情变得可以理解。

【讨论】:

  • 感谢您对网格部分和变量命名的帮助,但我仍然有一个问题:对于 username_var 出现错误说“未定义用户名_var”。我调用了一个从条目中获取 username_var 的函数,这是其中的一部分,这是错误:def mfetchinfo(): mtext1 = username_var.get()
  • 如果您在一个函数中创建username_var 并尝试在另一个函数中访问它,它将不可见;只有第一个函数可以看到变量。您可以将username_var 设为全局变量;或者你可以在任何函数之外创建它,这样它在任何地方都可见;或者你可以重构你的程序,让所有的 GUI 内容都在一个 MyApplication 类中,然后该类的所有方法都可以共享变量,如 self.username_var
  • 我尝试将它们设为全局变量,但还是不行,而且我没有足够的经验来创建类。
  • 请回复,输入一个时,两个框内都会出现文字。
  • 不,全局变量应该可以工作。你没有分享的代码肯定有问题。
【解决方案2】:

我相信这是因为您对两个条目使用相同的变量,所以当您写入一个时,您会在另一个中得到它。您应该创建第二个变量:

 ment1=StringVar()
 ment2=StringVar()
 mEntry1 = Entry(mGui, textvariable = ment1).grid(column = 0, row = 2, sticky = W)
 mEntry2 = Entry(mGui, textvariable = ment2).grid(column = 0, row = 4, sticky = W)

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2019-10-30
    • 2023-02-05
    • 2015-02-07
    • 2021-09-24
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多