Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在tkinter中更改表格在窗口中的位置_Python_Tkinter - Fatal编程技术网

Python 在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

我正试图在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')
结果如下所示:


有人能解释一下我做错了什么吗?

您应该只使用一个几何体管理器,即只使用
网格
,而不是
位置
以及
网格
。这也将确保在更改框的布局(如所需)时,不会有任何重叠

要将列表框“提升”到顶部,可以在调用
grid
时添加
sticky=N
作为参数。这看起来像
list1.grid(行=0,列=1,粘性=tk.N)


为将“RESUVALIVE”文本保留在列表框上方,可以将其添加为第一行(并将列表框更改为第二行),并使其列跨度参数为3,因此它位于中间(您可能需要添加<代码> Tasky= Tk .E+TK.W./Case>此处)。粘性部分几乎是正确的。请记住,OP使用的是

导入为tk
,因此为了使sticky正常工作,您需要执行
sticky=tk.N
或我的首选方法,因为无论您如何导入tkinter
sticky=“N”
@SierraMountainTech,在本例中,如果OP只是更改了列表框的
粘性
属性,那么它们将与使用
放置
标签重叠。要解决这一问题要比仅仅将其与
网格
管理器一起使用困难得多。关于导入Tk,您是对的,更新了。@SkillyTurtle谢谢您的回答!你能看看有问题的更新吗?我遇到了一些困难。在OP的问题“是”的情况下,标签放置在何处将是一个问题,但是您应该具体说明,因为您的声明似乎是在说不要与几何经理混合。在某些情况下,当您只是将一个框架放入根窗口或类似的pack用途时,您可能希望在同一代码中使用pack和grid。要响应您的编辑,您可以将
LabelFrame
rowspan
参数更改为2,以便一切都可以按照您的意愿重新安排。