条形图图未添加到现有的 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 窗口的主要内容,如果未能解决你的问题,请参考以下文章

Seaborn 线图和条形图未在 X 轴上对齐 [重复]

如何使用带有barcode4j库的pdfbox(1.8.12)将Code128条形码图像添加到现有pdf?

WPF条形图如何在条形图之间添加空格?

窗口大小更改导致我的条形图覆盖 - Matplotlib

Python使用seaborn可视化分组条形图并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)

如何在条形图的每个条形顶部添加一个额外的数字