Tkinter Python - 从实例方法更新标签会导致分段错误

问题描述 投票:0回答:1

我正在尝试使用通过调度程序进程调用的方法来更新标签,但是当我尝试配置标签时,应用程序因分段错误而崩溃

这是我的脚本

class Gui():
    def __init__(self):
        app = Tk()
        self.initialize_user_interface()

    def initialize_user_interface(self):
        self.title("Title")
        self.geometry(f"{1100}x{700}")

        self.sidebar_frame = Frame(self)
        self.my_label = Label(self.sidebar_frame)

        thread = threading.Thread(target=self.start_schedule, daemon=True)
        thread.start()

    def start_schedule(self):
        schedule.every(30).seconds.do(lambda: self.update_label())

    def update_label(self):
        self.my_label=configure(text="Custom Text")


if __name__ == "__main__":
    app = Gui()
    app.mainloop()

我尝试使用 self 调用类内部的方法,但我不断收到分段错误的错误

python-3.x tkinter
1个回答
0
投票

这是一个工作示例,每 3 秒将

Label
小部件的文本更新为随机数。它演示了如何使用 tkinter 的
after
方法来处理此问题,而不是依赖于
threading
和其他模块。

我还解决了阻止

Frame
Label
出现的问题,方法是将它们都传递给
pack()
,并且修复了
self.my_label.configure

中的拼写错误
from tkinter import *
from random import randint  # for demonstration purposes


class Gui(Tk):  # inherit from Tk in your main app class
    def __init__(self) -> None:
        super().__init__()  # initialize tkinter
        self.initialize_user_interface()
        self.update_label()

    def initialize_user_interface(self) -> None:
        self.title("Title")
        self.geometry(f"{1100}x{700}")

        self.sidebar_frame = Frame(self)
        self.sidebar_frame.pack()
        self.my_label = Label(self.sidebar_frame)
        self.my_label.pack()

    def update_label(self) -> None:
        """Set the label to a random value for demonstration"""
        self.my_label.configure(text=randint(0, 100))
        # repeat this function after however many mS
        self.after(3000, self.update_label)


if __name__ == "__main__":
    app = Gui()
    app.mainloop()

顺便说一句,您通常希望避免“明星”导入,例如

from tkinter import *
,因为它们可能导致称为“命名空间污染”的问题(想想如果您正在使用的其他模块有一个类,会发生什么命名为
Label
)。通常,您会看到
import tkinter as tk
,然后使用
tk
作为前缀实例化任何相关类,例如
tk.Label
tk.Button
等。

© www.soinside.com 2019 - 2024. All rights reserved.