Python(Tkinter)\初始化\限制?

2024-04-19 02:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

Python中init方法的条目数有限制吗?我正在用Tkinter构建一个简单的UI,当被其他方法引用时,编译器会忽略正确编写的标签。你知道吗

代码:

from tkinter import *    
from tkinter import ttk


class UI:

  def __init__(self, root):

    self.entryString = StringVar()
    self.entryString.set("50000000") #Default value     

    self.trialField = Entry(root, textvariable = self.entryString).grid(row = 0, column = 0, columnspan = 2)

    self.trialSend = Button(root, text = "Send value", command = self.setter()).grid(row = 1, column = 0)
    #self.defaultTrials = Button(root, text = "Default", command = self.resetTrials).grid(row = 1, column = 1)

    self.staticLabel = Label(root, text = "This gets sent to program when program is run:").grid(row = 2, column = 0, columnspan = 3)

    self.trialOut = Label(root, text = self.entryString.get())
    self.trialOut.grid(row = 3, column = 0, columnspan = 2)        

  def setter(self):
    self.trialOut.config(text = self.entryString.get())

但是,我得到了一个错误:“AttributeError:'UI'对象没有属性'trialOut'”

有一些场合,我可以移动trialOut部分的顶部,它的工作刚刚好。我还在学习使用Python和Tkinter,所以我很容易忽略了一些东西。非常感谢您的帮助。你知道吗


Tags: 方法textfromselfuiinittkintercolumn
1条回答
网友
1楼 · 发布于 2024-04-19 02:30:48

问题在于:

self.trialSend = Button(root, text = "Send value", command = self.setter()).grid(row = 1, column = 0)

请注意,您正在调用引用self.trialOut的^{self.setter,但是self.trialOut直到几行之后才被定义。你知道吗

你可能想要:

self.trialSend = Button(root, text = "Send value", command = self.setter).grid(row = 1, column = 0)

(注意self.setter后面缺少的括号)延迟调用函数直到用户单击按钮。你知道吗


在其他新闻中,你有几句话,比如:

self.someWidgetName = SomeWidget(...).grid(...)

在这种情况下,self.someWidgetName始终具有None的值,因为这是Widget.grid的返回值。这可能会导致人们(你!)阅读您的代码,因为所有这些类成员看起来都应该持有小部件实例,而实际上它们并不持有。一个更好的做法是执行您使用self.trialOut所做的操作在单独的行上使用几何体管理器:

self.someLabel = Label(...)
self.someLabel.grid(...)

相关问题 更多 >