当大内容放在同一行时防止小部件移动
Preventing widgets from moving when a large content is placed in the same row
我正在 Python 中编写一个程序来处理一些数据,然后在相同的 tkinter[=34 中输出结果的 plot =] window 使用 Canvas
。
我的问题是我需要将 canvas 和一些 Label
放在同一行; canvas 很大,所以它会使行扩展,标签将被下推,界面看起来不好看。
程序界面截图如下:
标签和canvas都放在同一行。单击 check
按钮时,将显示 canvas,行将展开,标签将被下推,如下图所示:
这是代码,
import matplotlib
matplotlib.use('TkAgg')
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from Tkinter import *
class mclass:
def __init__(self, window):
self.window = window
self.box = Entry(window)
self.button = Button (window, text="check", command=self.plot)
self.plotlabel= Label (window, text="The following is the plot")
self.box.grid (row=1, column=1)
self.button.grid(row=2, column= 1)
self.plotlabel.grid (row=3, column=1)
def plot (self):
x=np.array ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
v= np.array ([16,16.31925,17.6394,16.003,17.2861,17.3131,19.1259,18.9694,22.0003,22.81226])
p= np.array ([16.23697, 17.31653, 17.22094, 17.68631, 17.73641 , 18.6368,
19.32125, 19.31756 , 21.20247 , 22.41444 , 22.11718 , 22.12453])
fig = Figure(figsize=(6,6))
a = fig.add_subplot(111)
a.scatter(v,x,color='red')
a.plot(p, range(2 +max(x)),color='blue')
a.invert_yaxis()
a.set_title ("Estimation Grid", fontsize=16)
a.set_ylabel("Y", fontsize=14)
a.set_xlabel("X", fontsize=14)
canvas = FigureCanvasTkAgg(fig, master=self.window)
canvas.get_tk_widget().grid(row=3, column= 2)
canvas.draw()
window= Tk()
start= mclass (window)
window.mainloop()
如何在不向下推标签的情况下显示 canvas?我四处搜索,但找不到类似的问题。另外,我在网格方法中尝试了 rowspan,但它没有解决问题。
最简单的解决方案是同时使用 pack 和 grid。使用 pack 在 main window 的左侧放置一个框架。该框架将包含您所有的按钮和输入小部件。使用 pack 在主 window 的右侧放置另一个框架。这将包含您的情节。
接下来,您可以使用 pack 或 grid 将按钮或小部件放在左侧框架中。您在右框架中所做的任何事情都不会影响这些小部件的位置。
最后,使用 pack 或 grid 将您的 canvas 放在正确的框架中。您在这里所做的任何事情都不会影响您的按钮和其他小部件。
我正在 Python 中编写一个程序来处理一些数据,然后在相同的 tkinter[=34 中输出结果的 plot =] window 使用 Canvas
。
我的问题是我需要将 canvas 和一些 Label
放在同一行; canvas 很大,所以它会使行扩展,标签将被下推,界面看起来不好看。
程序界面截图如下:
标签和canvas都放在同一行。单击 check
按钮时,将显示 canvas,行将展开,标签将被下推,如下图所示:
这是代码,
import matplotlib
matplotlib.use('TkAgg')
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from Tkinter import *
class mclass:
def __init__(self, window):
self.window = window
self.box = Entry(window)
self.button = Button (window, text="check", command=self.plot)
self.plotlabel= Label (window, text="The following is the plot")
self.box.grid (row=1, column=1)
self.button.grid(row=2, column= 1)
self.plotlabel.grid (row=3, column=1)
def plot (self):
x=np.array ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
v= np.array ([16,16.31925,17.6394,16.003,17.2861,17.3131,19.1259,18.9694,22.0003,22.81226])
p= np.array ([16.23697, 17.31653, 17.22094, 17.68631, 17.73641 , 18.6368,
19.32125, 19.31756 , 21.20247 , 22.41444 , 22.11718 , 22.12453])
fig = Figure(figsize=(6,6))
a = fig.add_subplot(111)
a.scatter(v,x,color='red')
a.plot(p, range(2 +max(x)),color='blue')
a.invert_yaxis()
a.set_title ("Estimation Grid", fontsize=16)
a.set_ylabel("Y", fontsize=14)
a.set_xlabel("X", fontsize=14)
canvas = FigureCanvasTkAgg(fig, master=self.window)
canvas.get_tk_widget().grid(row=3, column= 2)
canvas.draw()
window= Tk()
start= mclass (window)
window.mainloop()
如何在不向下推标签的情况下显示 canvas?我四处搜索,但找不到类似的问题。另外,我在网格方法中尝试了 rowspan,但它没有解决问题。
最简单的解决方案是同时使用 pack 和 grid。使用 pack 在 main window 的左侧放置一个框架。该框架将包含您所有的按钮和输入小部件。使用 pack 在主 window 的右侧放置另一个框架。这将包含您的情节。
接下来,您可以使用 pack 或 grid 将按钮或小部件放在左侧框架中。您在右框架中所做的任何事情都不会影响这些小部件的位置。
最后,使用 pack 或 grid 将您的 canvas 放在正确的框架中。您在这里所做的任何事情都不会影响您的按钮和其他小部件。