我对Python、Tkinter和Matplotlib还很陌生。
我需要从一个简单的tkinter应用程序显示一个图表,一切都按预期工作。
问题是,当图表出现时,docker中图标的应用程序会变成这样:
的数据
关闭图形窗口时,图标不会恢复到原来的图标,这很烦人。
我尝试了一些我在StackOverflow上找到的建议解决方案,但显然没有任何效果。
我的环境:
- macos:14.1.1(索诺马)
- Python:3.12(从下载的软件包安装)
- PyCharm:2023.2.5
即使使用旧版本的python,我也遇到了同样的行为,但同样的代码在Windows上工作得很好。
这是我的测试代码(摘录以证明问题)。
from tkinter import *
import matplotlib
import matplotlib.pyplot as plt
root = Tk()
def show_graph():
print("Graph")
a = [90.2, 123.8, 110.2, 108.1, 115.0]
b = [100, 100, 100, 100, 100]
target = [98, 98, 98, 98, 98]
weeks = [0, 1, 2, 3, 4]
plt.Figure()
figure1 = plt.figure(figsize=(4, 2), dpi=200)
ax = figure1.add_subplot(111)
ax.set_xticks(list(range(1, 24)))
plt.plot(weeks, a, '--.', label="A")
plt.plot(b, 'r--', label="B")
plt.plot(target, 'g--', label="C")
plt.legend()
plt.xlabel('Week')
plt.ylabel('A', labelpad=1)
plt.grid(True, which="both", ls="-")
figure1.show()
if __name__ == '__main__':
matplotlib.use('TkAgg')
root.title("Matplotlib Icon Issue")
root.geometry('500x500')
frame = Frame(root)
frame.pack()
Label(frame, text="label").grid(row=0, column=0)
Button(frame, text="Graph", command=show_graph).grid(row=1, column=0)
root.mainloop()
字符串
1条答案
按热度按时间a0x5cqrl1#
当显示图形时,您使用matplotlib的窗口管理器,而不是使用Tkinter,因此这是预期的。
既然你已经在使用Tkinter窗口管理器,那么你就不应该使用
.show
方法的图形,相反,你可以将图形嵌入到Tkinter Canvas。示例来自https://matplotlib.org/3.1.0/gallery/user_interfaces/embedding_in_tk_sgskip.html
字符串