有人可以在这里帮助我吗?当我添加以下行时,textvariable不会被更新:
f = plt.figure(0, figsize=(20,9))
如果我在上面的行中添加了注释,那么我会看到Label中的textvariable正在更新,但是取消注释该行后,Label便不再更新。 有人可以帮我吗?
from tkinter import *
from tkinter import ttk
from tkinter import StringVar
import matplotlib
import matplotlib.artist as artists
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
import matplotlib.animation as animation
f = plt.figure(0, figsize=(20,9))
class make_window():
def __init__(self, *args, **kwargs):
self.win = Tk()
self.win.title("Test")
self.win.state("zoomed")
Frame = ttk.Frame(self.win)
Frame.pack()
labelVar = StringVar()
labelVar.set("Hi")
self.LabelUpdate = Label(Frame, textvariable = labelVar)
self.LabelUpdate.pack()
#################################################################################
window = make_window()
window.win.mainloop()
答案 0 :(得分:0)
我注意到您需要解决一些问题。
首先,导入(from tkinter import *
)的方式会引起问题,实际上,在这种情况下,您会犯这种导入众所周知的错误。稍后在您的代码中执行Frame = ttk.Frame()
,而这一行实际上是覆盖从Frame
导入的from tkinter import *
。不要将变量的名称与内置方法的名称相同。为了防止这种错误,您可以简单地执行import tkinter as tk
并始终使用tk.
前缀来防止代码中的任何覆盖。
接下来,我注意到您的标签确实装在屏幕上,但显示的文字不够奇怪,但是当我注释掉f = plt.figure(0, figsize=(20,9))
时,标签开始按预期工作。
因此,与matplotlib和此标签存在一些奇怪的相互作用。
当我将f = plt.figure(0, figsize=(20,9))
更改为f = Figure(figsize=(20,9))
时,标签也会再次起作用。
如果Figure()
并不完全是您要在此处使用的内容,那么请向您的代码中添加更多上下文,以了解您期望如何使用f
。
更新:
我也确实注意到,当您将f
移到self.win = tk.Tk()
之后时,代码可以正常工作。我唯一的猜测是为什么会发生这种情况,可能是matplotlib如何在其中确实拥有自己的tkinter代码。因此,如果您在创建tkinter实例之前尝试创建plt.figure
,那么我在后端通过matplotlib运行了一个tkinter实例,这就是导致异常行为的原因。我可能是错的,但我别无选择。也许Tkinter大师布莱恩·奥克利(Bryan Oakley)可以启发我们有关造成此问题的原因:D
import tkinter as tk
import tkinter.ttk as ttk
import matplotlib
import matplotlib.artist as artists
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
import matplotlib.animation as animation
class make_window():
def __init__(self, *args, **kwargs):
self.win = tk.Tk()
# moving the line to here should at least allow your code to work.
f = plt.figure(0, figsize=(20,9))
self.win.title("Test")
self.win.state("zoomed")
frame = ttk.Frame(self.win)
frame.pack()
labelVar = tk.StringVar()
labelVar.set("Hi")
self.LabelUpdate = tk.Label(frame, textvariable = labelVar)
self.LabelUpdate.pack()
window = make_window()
window.win.mainloop()