条形图图未添加到现有的 tkinter 窗口
Posted
技术标签:
【中文标题】条形图图未添加到现有的 tkinter 窗口【英文标题】:Bar graph Figure does not get added to the existing tkinter window 【发布时间】:2020-04-14 14:35:58 【问题描述】:我正在制作一个基于 GUI 的 Tkinter 项目,在主屏幕之后,我必须打开以下窗口,其中包含一个绘制了条形图的图形。以下代码只是我项目的一部分(以及项目中许多按钮之一的命令// 而 screen2 是来自另一个根窗口的 Toplevel() 窗口)
qy4=Toplevel(screen2)
qy4.title("4th Query")
adjustWindow(qy4)
f1=Figure(figsize=(5,5),dpi=100).add_subplot(111).plot(q4())
canvas=FigureCanvasTkAgg(f1,master=canvas)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=True)
toolbar=NavigationToolbar2Tk(f1,master=canvas)
toolbar.update()
canvas._tkcanvas.pack(side=tk.TOP,fill=tk.BOTH,expand=True)
但我明白了: 我想在我的“qy4”窗口上有相同的数字,这样我就可以在条形图上方或下方添加更多标签或文本框,我听说尝试了 n 件事情,但仍然找不到代码中有什么问题。
另外,上图的 x 轴标签是不可见的,我该如何以如下方式显示它们(请注意,屏幕截图中的以下代码已被编辑以显示它应该如何显示):
我从其他模块调用为 q4() 的实际代码:
我没有上传整个项目代码,只是上传了一部分,我对 Python 和 Tkinter 还很陌生,我在我的项目中遵循程序方法,我知道这是一种不好的编码方式。
【问题讨论】:
canvas=FigureCanvasTkAgg(f1,master=canvas)
:这应该会抛出一个错误,因为canvas
是在定义之前使用的?应阅读:canvas=FigureCanvasTkAgg(f1,master=qy4)
我进行了更改。尽管如此,该图形仍显示在画布窗口之外。
阅读You are creating two figures
“我在我的项目中遵循程序方法,我知道这是一种不好的编码方式”——相反!过程式编程本身并没有错。
【参考方案1】:
您需要在FigureCanvasTkAgg
方法中为绘图指定Toplevel
窗口的名称为master
窗口。
您可以使用plt.xticks(x_ticks_data, rotation=90)
使您的 x 轴标签垂直打印。
这是一个简单的说明:
代码:
import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
window = tk.Tk()
def plot():
top_win = tk.Toplevel(window)
x = ['Col A', 'Col B', 'Col C']
y = [50, 20, 80]
fig = plt.figure(figsize=(4, 5))
plt.bar(x=x, height=y)
# You can make your x axis labels vertical using the rotation
plt.xticks(x, rotation=90)
# specify the toplevel window as master
canvas = FigureCanvasTkAgg(fig, master=top_win)
canvas.draw()
canvas.get_tk_widget().grid(row=0, column=0, ipadx=40, ipady=20)
btn = tk.Button(window, text='Show plot', command=plot)
btn.grid(row=0, column=0, padx=20, pady=10)
window.mainloop()
输出:
【讨论】:
谢谢,关于 xticks()。但我在这里找到了更好的解决方案link 但是在对主窗口进行更改之后。尽管如此,该图形仍显示在画布之外。以上是关于条形图图未添加到现有的 tkinter 窗口的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有barcode4j库的pdfbox(1.8.12)将Code128条形码图像添加到现有pdf?
Python使用seaborn可视化分组条形图并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)