Python 在tkinter中更改表格在窗口中的位置
我正试图在tkinter中创建一个窗口,显示我的计算结果。它应该有一个图表和一些小表格。我不能按我需要的方式安排它们。下面是示例代码。在本例中,我只显示一个图形和一个表Python 在tkinter中更改表格在窗口中的位置,python,tkinter,Python,Tkinter,我正试图在tkinter中创建一个窗口,显示我的计算结果。它应该有一个图表和一些小表格。我不能按我需要的方式安排它们。下面是示例代码。在本例中,我只显示一个图形和一个表 import matplotlib from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure import tkinter as tk from tkinter import ttk i
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')
结果如下所示:
有人能解释一下我做错了什么吗?您应该只使用一个几何体管理器,即只使用
网格,而不是位置以及网格。这也将确保在更改框的布局(如所需)时,不会有任何重叠
要将列表框“提升”到顶部,可以在调用grid
时添加sticky=N
作为参数。这看起来像list1.grid(行=0,列=1,粘性=tk.N)
为将“RESUVALIVE”文本保留在列表框上方,可以将其添加为第一行(并将列表框更改为第二行),并使其列跨度参数为3,因此它位于中间(您可能需要添加<代码> Tasky= Tk .E+TK.W./Case>此处)。粘性部分几乎是正确的。请记住,OP使用的是
导入为tk
,因此为了使sticky正常工作,您需要执行sticky=tk.N
或我的首选方法,因为无论您如何导入tkintersticky=“N”
@SierraMountainTech,在本例中,如果OP只是更改了列表框的粘性
属性,那么它们将与使用放置
的标签重叠。要解决这一问题要比仅仅将其与网格管理器一起使用困难得多。关于导入Tk,您是对的,更新了。@SkillyTurtle谢谢您的回答!你能看看有问题的更新吗?我遇到了一些困难。在OP的问题“是”的情况下,标签放置在何处将是一个问题,但是您应该具体说明,因为您的声明似乎是在说不要与几何经理混合。在某些情况下,当您只是将一个框架放入根窗口或类似的pack用途时,您可能希望在同一代码中使用pack和grid。要响应您的编辑,您可以将LabelFrame
的rowspan
参数更改为2,以便一切都可以按照您的意愿重新安排。