Python Tkinter中StringVar无法更新按钮文本且无显示,求解决?(Spyder5.5.5)
我在使用Spyder 5.5.5时遇到以下问题:在Python的Tkinter中,使用StringVar绑定ttk.Button的文本,不仅点击按钮后无法更新文本,初始状态下按钮也没有显示任何文本。
我的代码如下:
# -*- coding: utf-8 -*- import tkinter as tk from tkinter import ttk class Main_Window(tk.Tk): def __init__(self): super().__init__() self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) Child_Frame(self).grid(row=0, column=0) class Child_Frame(ttk.Frame): def __init__(self, parent): super().__init__(parent) self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) self.button_var = tk.StringVar(value="Connect") button = ttk.Button(self, textvariable=self.button_var, command = self.upd) button.grid(row = 0, column = 0, sticky='news') def upd(self): self.button_var.set('Disconnect') Main_Window().mainloop()
运行后,按钮无任何初始文本显示,点击按钮也不会切换为"Disconnect"。
问题原因
ttk组件(如ttk.Button)需要使用ttk模块下的变量类,而非tk模块的变量类。你当前使用的tk.StringVar属于tk模块,和ttk组件的绑定机制不兼容,导致变量无法与按钮文本建立关联,既不显示初始值,也无法响应更新。
解决方案
将tk.StringVar替换为ttk.StringVar即可:
修改后的关键代码:
self.button_var = ttk.StringVar(value="Connect")
完整修改后的代码:
# -*- coding: utf-8 -*- import tkinter as tk from tkinter import ttk class Main_Window(tk.Tk): def __init__(self): super().__init__() self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) Child_Frame(self).grid(row=0, column=0) class Child_Frame(ttk.Frame): def __init__(self, parent): super().__init__(parent) self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) self.button_var = ttk.StringVar(value="Connect") button = ttk.Button(self, textvariable=self.button_var, command = self.upd) button.grid(row = 0, column = 0, sticky='news') def upd(self): self.button_var.set('Disconnect') Main_Window().mainloop()
修改后运行,按钮会正常显示初始文本"Connect",点击后会切换为"Disconnect"。
内容的提问来源于stack exchange,提问作者Radar32
相关产品推荐
相关产品推荐

