【问题标题】:How to update label on tkinter如何更新 tkinter 上的标签
【发布时间】:2017-03-21 05:38:08
【问题描述】:

我想在按下其中一个按钮后更新标签。 这是我的代码 - 我添加了一个标签(称为 label1),现在我有两个问题:

  1. 它呈现出一些乱码
  2. 如何在用户按下“浏览”按钮时使用文本更新标签?
from tkinter import *
import threading

class Window(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master = master
        self.init_window()

    def init_window(self):
        self.var = IntVar()
        self.master.title("GUI")
        self.pack(fill=BOTH, expand=1)
        quitButton = Button(self, text="Exit", command=self.client_exit)
        startButton = Button(self, text="Browse", command=self.start_Button)
        label1 = Label(self, text=self.lable_1)

        quitButton.grid(row=0, column=0)
        startButton.grid(row=0, column=2)
        label1.grid(row=1, column=0)

    def client_exit(self):
        exit()

    def lable_1(self):
        print('starting')

    def start_Button(self):
        def f():
            print('Program is starting')
        t = threading.Thread(target=f)
        t.start()

root = Tk()
root.geometry("250x50")
app = Window(root)
root.title("My Program")
root.mainloop()

【问题讨论】:

  • 使用self.label1 访问Label。顺便说一句:self.label_1 是函数,将其用作文本毫无意义 - text=self.label_1。顺便说一句:print 仅在屏幕上发送文本 - 它不会为变量赋值 - 在函数 label_1 中使用 return 而不是 print 然后你可以使用 text=self.lable_1() - 最后使用 () .
  • 顺便说一句:在 tkinter 中,您可以使用 root.after(milisecond, function_name) 定期运行函数,也许您不需要线程。
  • 在提出这个问题之前,您是否在本网站上搜索过答案?有许多更新标签的程序示例,并且许多不使用线程重复执行此操作。

标签: python python-3.x tkinter label


【解决方案1】:

使用self.label['text']更改文字

(最小?)工作示例:

import tkinter as tk

class Window(tk.Frame):

    def __init__(self, master=None):
        tk.Frame.__init__(self, master)

        # tk.Frame.__init__ creates self.master so you don't have to
        #self.master = master 

        self.init_window()

    def init_window(self):
        self.pack(fill=tk.BOTH, expand=1)

        quit_button = tk.Button(self, text="Exit", command=root.destroy)
        start_button = tk.Button(self, text="Browse", command=self.on_click)

        self.label = tk.Label(self, text="Hello")

        quit_button.grid(row=0, column=0)
        start_button.grid(row=0, column=1)

        self.label.grid(row=1, column=0, columnspan=2)

    def on_click(self):
        self.label['text'] = "Starting..."

root = tk.Tk()
app = Window(root)
root.mainloop()

【讨论】:

  • 谢谢你们,这对我很有帮助。在问之前我搜索了很多次,我只是编码新手,有时我只是不知道如何以正确的顺序定位事物,而且这个“自我”的东西对我来说仍然太复杂了。在你给我的例子中,它真的很有意义,对理解有很大帮助。再次感谢!
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 2017-11-18
相关资源
最近更新 更多