【问题标题】:Entry widget contents not changing with function call条目小部件内容不随函数调用而改变
【发布时间】:2015-08-30 17:07:59
【问题描述】:

每当显示 tkinter 框架时,我都需要更改条目的内容。以下是我到目前为止所拥有的,它似乎不起作用。我尝试使用data = self.read(),然后使用now.insert(0, data),但这也没有奏效。如果显示该值,则不会在每次调用 ReadLabel1 类时更改它。

class ReadLabel1(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent, bg="blue")

        label = tk.Label(self, text="SomeData:", font = "Times 12", bg="blue")
        label.place(x=10, y=100) #ack(pady=5,padx=30)

        self.smStr = tk.StringVar()
        now=tk.Entry(self, width=22, textvariable=self.read())
        now.place(x=120, y=103)

    def read(self):
        # code to get data
        return data

【问题讨论】:

  • textvariable 应该是 tk.StringVar 或类似的对象。
  • 您说您想在显示框架时更改Entry 小部件的内容,但是您想将条目更改为哪些内容?
  • 感谢指正!我试图通过读取函数更改 smStr 变量,但它没有显示任何值。
  • @Axl 我正在尝试使用“def read”中设置的内容更改条目内容,所以现在我在“def read”函数中设置了“smStr”变量

标签: python tkinter tkinter-entry


【解决方案1】:

你需要把'改变一个条目的内容'变成一个参数回调,把'每当tkinter帧显示'变成一个事件,然后将app、事件和回调绑定在一起。这是一个最小的例子。

import time
import tkinter as tk

root = tk.Tk()
now = tk.StringVar()
lab = tk.Label(root, textvariable=now)
lab.pack()
def display_now(event):
    now.set(time.ctime())
root.bind('<Visibility>', display_now)
root.bind('<FocusIn>', display_now)

将窗口最小化为图标并将其恢复会触发 Visibility 事件。用不同的窗口覆盖和仅仅揭开并没有,至少在 Windows 上没有。单击未覆盖或仅未激活的窗口触发 FocusIn。您可以对您的系统进行更多试验。我用过这个tkinter reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2022-12-08
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多