【问题标题】:Tkinter entry boxes filling automatically? How to stop?Tkinter 输入框自动填充?如何停止?
【发布时间】:2020-07-28 18:26:32
【问题描述】:

这是我第一次使用 tkinter,请原谅我,因为我觉得这是一个非常愚蠢的问题,但我找不到答案。我做了一个简单的骰子滚轮,看起来像这样:

screenshot 忽略好人/坏人的事情......只是给出一个有趣的愚蠢信息。

它有效,但是如果我用一个值填充任何输入框,其余的会自动填充相同的值。我不希望这样,我希望他们是独立的。

这是用于创建输入框的代码:

#D4 STUFF
    #CREATE ENTRY BOX
    self.entryD4 = ttk.Entry(self.rollButtonFrame, 
                        width=self.entryWidth,
                        textvariable = '0')
    self.entryD4.grid(row=self.rollRowStart,column=self.entryCol)

    #CREATE BUTTONS
    self.d4Button = ttk.Button(self.rollButtonFrame, text = self.d4entryText,
                                     command = self.rollD4)
    self.d4Button.grid(row=self.rollRowStart,column=self.rollCol)
    
    #CREATE LABELS FOR ANSWERS
    self.d4label = ttk.Label(self.rollButtonFrame, text = 'Total: 0')
    self.d4label.grid(row=self.rollRowStart,column=self.answerCol)
    
    #CREATE LABELS FOR DESCRIPTIONS
    descText = 'Number of '+self.diceNames[0]+' dice: '
    d4desc = ttk.Label(self.rollButtonFrame, text = descText)
    d4desc.grid(row=self.rollRowStart,column=self.descCol)

这只是对 D6、D8 等重复。我知道这是非常低效的,但我强制它先学习,然后再重写高效的代码。

有人知道为什么它会自动填充吗?我好像搞不懂。

编辑: 我发现它是因为 textvariable 参数。但是,如果我删除它,我不会得到“默认文本”,并且在尝试在没有值的情况下进行计算时会引发错误。有没有办法在避免问题的同时插入默认值?

【问题讨论】:

  • 如果您使用条目的textvariable= 选项(这里实际上并不需要),它必须是 Tkinter Var 类型之一 - 例如 StringVarIntVar。您将所有条目设置为相同的变量名称,因此它们都必然显示相同的内容。
  • 你认为textvariable = '0' 在做什么?它是无效的,并且不清楚你想用它来完成什么。
  • 它被用来添加“0”作为默认值,而不是将条目留空。虽然我认为可能有更好的方法来做到这一点

标签: python python-3.x user-interface tkinter tkinter-entry


【解决方案1】:

首先,textvariable 是什么?

entry widget 中用于输入文本字符串。此小部件允许用户以单一字体输入一行文本。这是由textvariabletextvar 完成的。

如果您想在条目 wigit 中输入 integer 类型值。然后定义一个变量,例如ujjwal=IntVar() 现在变量 ujjwal 将存储您在 entry wigit 中输入的值

如果您想在条目 wigit 中输入string 类型值。然后定义一个变量,例如ujjwal=StringVar() 现在变量ujjwal 将存储您在entry wigit 中输入的值

现在如何把它放在entry wigit 这是代码

Entry(frame_name,font=(' arial 16 bold'),textvariable=ujjwal)

现在如何获取textvariable中输入的值

ujjwal.get()

默认情况下如何set textvariable

ujjwal.set(0) # if ujjwal=IntVar()

ujjwal.set(" ") # if ujjwal=StringVar()

这里有一个小例子供您参考


from tkinter import *

window = Tk()
comp=StringVar()

window.title("Welcome ")

window.geometry('350x200')

lbl = Label(window, text="Hello")

lbl.grid(column=0, row=0)

txt = Entry(window,width=10, textvariable=comp)

txt.grid(column=1, row=0)

def clicked():

    print(comp.get())

btn = Button(window, text="Click Me", command=clicked)

btn.grid(column=2, row=0)

window.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2019-01-30
    • 2012-03-29
    • 2015-03-12
    • 2016-07-26
    相关资源
    最近更新 更多