我正在尝试在tkinter中创建一个窗口,显示我的计算结果。它应该有一个图表和一些小表。我不能按照我需要的方式安排他们。以下是示例代码。在这种情况下,我只显示一个图表和一个表格。
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import tkinter as tk
from tkinter import ttk
import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.random.randint(0,30,size=(15, 3)), columns=list('ABC'))
df1['index'] = df1.index
l1 = [1,2,3,4,5]
l2 = [6,7,8,9,10]
l3 = [100,200,300,400,500]
root = tk.Tk()
lf = ttk.Labelframe(root, text='Results')
lf.grid(row=0, column=0, sticky='nwes', padx=3, pady=3)
fig = Figure(figsize=(10,5), dpi=70)
ax = fig.add_subplot(111)
df1.plot(x='index', y=['A', 'B', 'C'], ax=ax)
canvas = FigureCanvasTkAgg(fig, master=lf)
canvas.show()
canvas.get_tk_widget().grid(row=0, column=0)
label = ttk.Label(root, text= 'Res_values')
label.config(font=("Courier", 20))
label.place(x = 810, y = 70)
li1 = l1
li2 = l2
li3 = l3
list1 = tk.Listbox(root)
list2 = tk.Listbox(root)
list3 = tk.Listbox(root)
for item in li1:
list1.insert(0,item)
for item in li2:
list2.insert(0,item)
for item in li3:
list3.insert(0,item)
list1.grid(row=0, column=1)
list2.grid(row=0, column=2)
list3.grid(row=0, column=3)
root.mainloop()
代码执行的结果如下所示:
我希望将表放在更靠近图表的位置,并使列变小。
喜欢那个
是否可以这样做?
UPD 我更改了代码中指示放置表格位置的部分
label = ttk.Label(root, text= 'Res_values')
label.config(font=("Courier", 20))
label.grid(row=0, column = 1, columnspan=3, sticky='N')
并且
list1.grid(row=1, column=1, sticky='E'+'W')
list2.grid(row=1, column=2, sticky='E'+'W')
list3.grid(row=1, column=3, sticky='E'+'W')
结果如下:
有谁能解释我做错了什么?
答案 0 :(得分:1)
您应该只使用一个几何管理器,即仅grid
,而不是place
以及grid
。这也将确保在改变你想要的盒子的布局时,什么都不会重叠。
提高'您的列表框位于顶部,当您在其上调用sticky=N
时,可以添加grid
作为参数。这看起来像list1.grid(row=0, column=1, sticky=tk.N)
。
保持你的" Res_values"在列表框上方的文本中,您可以将其添加为第一行(并将列表框更改为第二行),并使其列-spar参数为3,因此它位于中间(您可能必须添加{ {1}}这里)。