我不能更改实验室的文本

2024-09-28 22:37:52 发布

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

我正在为一个GUI程序寻找源代码。我做了一个简单的测试,我不能改变GUI上的文本值,没有错误,也没有任何事情发生。关于mainloopTkinter有什么问题吗?你知道吗

你知道吗序列号.py地址:

import gui
gui.chiplabel.config(text="A.3f V" )

你知道吗图形用户界面.py地址:

from Tkinter import *
root = Tk()
chiplabel = Label(root, relief=RIDGE,  width = 9 , text ="Unknown",
                  padx=0, pady=0).grid(row = 0,column=5, sticky =W)
root.mainloop()

Tags: textpy文本import程序源代码tkinter地址
2条回答

你的代码有两个主要问题。它需要被重组,而你在布局你的小部件时犯了一个非常常见的错误。你知道吗

组织代码

按照代码的结构,对configure的调用发生在mainloop退出之后,以及小部件被销毁之后。您需要重新组织代码,以便对mainloop的调用是执行的最后一行代码。你知道吗

在我看来,这最好是通过使用类和对象来实现的,但这并不是绝对必要的。只需在调用mainloop之后不需要任何代码。你知道吗

布局小部件

问题是这条线:

chiplabel = Label( root, relief=RIDGE,  width = 9 , text ="Unknown",  padx=0, pady=0).grid(row = 0,column=5, sticky =W)

在python中,当您执行x=y().z()时,x被赋予z()的值。所以,当你做chiplabel = Label(...).grid(...)时,chiplabel被赋予grid(...)的值。网格总是返回None,所以chiplabel总是None。因此,您无法重新配置它,因为您丢失了对小部件的引用。你知道吗

解决方案是创建小部件并分两步布置小部件。你知道吗

一种方法是在类中创建UI,例如:

import Tkinter as tk  # note don't use wildcard imports

class GUI(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        self.chiplabel = tk.Label(
            self,
            padx=0,
            pady=0,
            relief=tk.RIDGE,
            text="Unknown",
            width=9,
        )  # note alphabetical order and consistent spacing
        self.chiplabel.grid(
            column=5, 
            row=0, 
            sticky=tk.W,
        )  # note grid is separate step

不要原地运行它,这样就可以import类而不运行任何东西。那么你的serial.py看起来更像:

from gui import GUI

interface = GUI()

interface.chiplabel.config(text="A.3f V")

interface.mainloop()

如果需要多个帧,可以执行Switching between frames in tkinter menu之类的操作。你知道吗

相关问题 更多 >