【发布时间】:2022-11-28 08:35:41
【问题描述】:
我正在编写一个基于 python tkinter 的 GUI,每当我按下一个按钮时,它应该在新 Windows 中显示 Matplotlib-Plots。情节应该是非排他性的,我希望能够提出尽可能多的情节。 (原App有多个按钮,我在下面缩短了)
问题是:当我单击其中一个按钮时,绘图会正确显示。当我再次关闭情节时,使用的按钮的行为变得怪异:
- 在 MacOS 上,它似乎在鼠标悬停时被推入
- 在 Windows 中,它会在剩余的运行时间中保持推送状态
在这两个操作系统上,它都可以很好地工作。第一次使用后只有按钮的图形很奇怪。我相信这与正在运行的 plt.show() 以某种方式阻止 GUI 框架有关,但我无法确定。
class Simulator: def __init__(self) -> None: self.startGUI() def startGUI(self): self.window = tk.Tk() frmCol2 = tk.Frame(pady=10, padx=10) self.btnDraw = tk.Button(master = frmCol2, text="Draw Something", width=20) self.btnDraw.grid(row = 1, column = 1) self.btnDraw.bind("<Button-1>", self.drawSth) frmCol2.grid(row=1, column=2, sticky="N") self.window.mainloop() def drawSth(self, event): if self.btnDraw["state"] != "disabled": self.visualizer.plotSth(self.scenario)绘图本身由以下类的对象可视化器完成:
class RadarVisualizer: def plotClutterVelocities(self, scenario): scArray = np.array(scenario) plt.figure() plt.plot(scArray[:,0], scArray[:,1]) plt.title("Some Title") plt.grid() plt.show()我检查了 MPL 后端:它是 TkAGG。 我还试图将绘图放在不同的线程中,这让 python 哭得很厉害。似乎期望这些情节在同一个线程中开始。可能是因为我使用的后端也是基于 Tkinter 的。
【问题讨论】:
标签: python matplotlib tkinter