当大型内容放在同一行时,防止小部件移动

时间:2015-07-16 17:05:48

标签: python canvas layout tkinter widget

我正在用Python编写一个程序来处理一些数据,然后使用Canvas在同一个 tkinter 窗口中输出结果的 plot

我的问题是我需要将画布放在与某些Label相同的行中;画布很大,因此它会使行展开,标签将被按下,界面看起来不太好。

以下是该程序界面的截图:

enter image description here

标签和画布都放在同一行。单击check按钮时,画布将显示,行将被展开,标签将被按下,如下面的屏幕截图所示:

enter image description here

这是代码,

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()

如何在不按标签的情况下显示画布?我四处搜寻,但找不到类似的问题。另外,我在网格方法中尝试过rowspan,但它没有解决问题。

1 个答案:

答案 0 :(得分:2)

最简单的解决方案涉及使用包和网格。使用pack将框架放在主窗口的左侧。此框架将包含所有按钮和输入小部件。使用pack将另一个框架放在主窗口的右侧。这将包含你的情节。

接下来,您可以使用包或网格将按钮或小部件放在左侧框架中。您在右侧框架中执行的任何操作都不会影响这些小部件的放置。

最后,使用包或网格将画布放在右侧框架中。你在这里做的任何事都不会影响你的按钮和其他小部件。