python - 如何在python tkinter中布局不规则定位的matplotlib条形图,不符合3x3网格
问题描述
以下 python 代码在两个滚动文本框和多个按钮后面显示了一个条形图。我在做python方面真的很新,我想知道是否可以调整图表的大小,以便:
(1) 它的左边缘与滚动文本框的右边缘对齐;
(2) 其顶部与按钮 3的顶部对齐;
(3) 它的底部与下滚动文本框的底部边缘对齐;和,
(4) 其右边缘与屏幕右边缘对齐。
import tkinter
from tkinter import Button
from tkinter import scrolledtext as tkst
import numpy as np
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
matplotlib.use('TkAgg')
def dummy():
return
ww = tkinter.Tk()
ww.geometry('700x400')
ww.state('zoomed')
datalst = [31, 41, 59, 26, 53, 58, 97, 96, 36]
ff = Figure(figsize=(6,6), dpi=100)
xx = ff.add_subplot(111)
ind = np.arange(len(datalst))
rects1 = xx.bar(ind, datalst, 0.8)
canvas = FigureCanvasTkAgg(ff, master=ww)
canvas.draw()
canvas.get_tk_widget().pack()
butt1 = Button(ww,text='Button 1',command=dummy, height=1,width=20,state='normal')
butt1.place(x=12, y=2)
butt2 = Button(ww,text='Button 2',command=dummy, height=1,width=20,state='disabled')
butt2.place(x=162, y=2)
butt3 = Button(ww,text='Button 3',command=dummy, height=1,width=10,state='disabled')
butt3.place(x=320, y=100)
butt4 = Button(ww,text='Button 4',command=dummy, height=1,width=10,state='disabled')
butt4.place(x=320, y=128)
butt5 = Button(ww,text='Button 5',command=dummy, height=1,width=10,state='disabled')
butt5.place(x=320, y=156)
butt6 = Button(ww,text='Button 6',command=dummy, height=1,width=10,state='disabled')
butt6.place(x=320, y=184)
butt7 = Button(ww,text='Button 7',command=dummy, height=1,width=12,state='disabled')
butt7.place(x=420, y=394)
butt8 = Button(ww,text='Button 8',command=dummy, height=1,width=12,state='disabled')
butt8.place(x=600, y=394)
disp_txt1 = tkst.ScrolledText(ww, width=36, height=12, wrap=tkinter.WORD, state='disabled')
disp_txt1.pack(fill=tkinter.BOTH)
disp_txt1.place(x=410, y=100)
disp_txt2 = tkst.ScrolledText(ww, width=36, height=5, wrap=tkinter.WORD, state='disabled')
disp_txt2.pack(fill=tkinter.BOTH)
disp_txt2.place(x=410, y=300)
ww.mainloop()
下面的橙色矩形显示了我想要图表的位置:
解决方案
要执行该导入。请注意,以这种方式tkinter as tk
导入总是好的,tkinter
因为它不会namespaces
将 tkinter 导入为 tk。
这不是您需要指定要将其放置在窗口中可用空间的中间位置widget
的错误。pack
要做到这一点,canvas.get_tk_widget().pack(side=tk.RIGHT)
这意味着屏幕的右侧。您可以查看该属性的文档。
完整代码
from tkinter import scrolledtext as tkst
import numpy as np
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import tkinter as tk
matplotlib.use('TkAgg')
def dummy():
return
ww = tk.Tk()
ww.geometry('700x400')
ww.state('zoomed')
datalst = [31, 41, 59, 26, 53, 58, 97, 96, 36]
ff = Figure(figsize=(6,6), dpi=100)
xx = ff.add_subplot(111)
ind = np.arange(len(datalst))
rects1 = xx.bar(ind, datalst, 0.8)
canvas = FigureCanvasTkAgg(ff, master=ww)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.RIGHT)
butt1 = tk.Button(ww,text='Button 1',command=dummy, height=1,width=20,state='normal')
butt1.place(x=12, y=2)
butt2 = tk.Button(ww,text='Button 2',command=dummy, height=1,width=20,state='disabled')
butt2.place(x=162, y=2)
butt3 = tk.Button(ww,text='Button 3',command=dummy, height=1,width=10,state='disabled')
butt3.place(x=320, y=100)
butt4 = tk.Button(ww,text='Button 4',command=dummy, height=1,width=10,state='disabled')
butt4.place(x=320, y=128)
butt5 = tk.Button(ww,text='Button 5',command=dummy, height=1,width=10,state='disabled')
butt5.place(x=320, y=156)
butt6 = tk.Button(ww,text='Button 6',command=dummy, height=1,width=10,state='disabled')
butt6.place(x=320, y=184)
butt7 = tk.Button(ww,text='Button 7',command=dummy, height=1,width=12,state='disabled')
butt7.place(x=420, y=394)
butt8 = tk.Button(ww,text='Button 8',command=dummy, height=1,width=12,state='disabled')
butt8.place(x=600, y=394)
disp_txt1 = tkst.ScrolledText(ww, width=36, height=12, wrap=tk.WORD, state='disabled')
disp_txt1.pack(fill=tk.BOTH)
disp_txt1.place(x=410, y=100)
disp_txt2 = tkst.ScrolledText(ww, width=36, height=5, wrap=tk.WORD, state='disabled')
disp_txt2.pack(fill=tk.BOTH)
disp_txt2.place(x=410, y=300)
ww.mainloop()
推荐阅读
- python - 如何在具有不同类的数据集上微调模型?
- redis - Python rq-scheduler:在一段时间后将失败的作业排入队列
- java - 如何在struts2中为下拉列表使用国际化
- git - 如何通过 ssh 在服务器上初始化 git?
- android - 如何使用标签标题从 Android PagerAdapter 返回片段
- java - 跨文档查询的 Elasticsearch 复合分组
- android - 如何将模态表顶部边缘更改为圆形不起作用
- flutter - copyWith() 函数有什么作用?
- java - 使用 Apache POI 将前景色/突出显示应用于 excel 的特定行
- azure - 如何使用 azure API 根据磁盘大小查找 Azue Ultra 磁盘 IOPS 和磁盘吞吐量范围