Tkinter python GUI问题

时间:2015-09-18 20:22:25

标签: python tkinter tkinter-canvas

我正在尝试为我的学期项目创建菜单,但我遇到了一个问题。

我希望我的控件有一个左窗格,右边会有可视化但是当我运行代码时,因为t1.pack()和c1.pack()而在左上角区域创建了一个非想要的空间

请帮助我如何才能获得两个明确的窗格。

如果你没有得到这个问题,请告诉我。

提前致谢:)

__author__ = 'sagar'
try:
    import tkinter as tk  # for python 3
except:
    #import Tkinter as tk  # for python 2
    from Tkinter import *
    import ttk as ttk
    import ctypes
    import tkMessageBox

user32 = ctypes.windll.user32
WIDTH,HEIGHT = user32.GetSystemMetrics(0),user32.GetSystemMetrics(1)
WIDTH -= 50
HEIGHT -= 75

class Application: #pygubu.TkApplication
    def __init__(self,root):
        self.root = root

        self.fr_main = Frame(self.root,background="grey",highlightcolor="red")
        self.fr_main.grid(row=0,column=0,ipadx=(5*WIDTH)/100,ipady=HEIGHT)
        # self.fr_main.pack()

        self.btn_Simulator = Button(self.fr_main,text="Simulator")
        self.btn_Simulator.grid(row=0,column=0,pady=10)
        # self.btn_Simulator.pack()

        self.btn_Analysis = Button(self.fr_main,text="Analysis")
        self.btn_Analysis.grid(row=0,column=1,pady=10)
        # self.btn_Analysis.pack()


        self.fr_second = Frame(self.root,background="black",highlightcolor="red")
        self.fr_second.grid(row=0,column=1,ipadx=(40*WIDTH)/100,ipady=HEIGHT)
        self.nb_main = ttk.Notebook(self.fr_second)
        self.nb_main.pack(expand=1,fill=BOTH)


        f1 = Frame(self.nb_main)
        f2 = Frame(self.nb_main)

        self.nb_main.add(f2,text="Canvas")
        self.nb_main.add(f1,text="Calculation")

        t1 = Text(f1)
        c1 = Canvas(f2)
        c1.configure(background="black")
        t1.pack(expand=1,fill=BOTH)
        c1.pack(expand=1,fill=BOTH)


    def __controlState__(self,control,state):
        control.configure(state =state)

    def showName(self,Enableframe,DisableFrame):

        for child in Enableframe.winfo_children():
            Enableframe.config(relief = RAISED)
            self.__controlState__(child,"active")

        for child in DisableFrame.winfo_children():
            self.__controlState__(child,"disable")


if __name__ == '__main__':
    root = Tk()
    app = Application(root)
    root.title("Network Simulator")


    root.geometry('%dx%d+%d+%d' % (WIDTH,HEIGHT,0,0))
    root.mainloop()

1 个答案:

答案 0 :(得分:1)

  

请帮助我如何才能获得两个明确的窗格。

将两个框架并排占据窗口整个高度的绝对最简单的方法是使用pack和适当的选项:

self.fr_main.pack(side="left", fill="both", expand=True)
self.fr_second.pack(side="left", fill="both", expand=True)

关键是第一个需要在左侧或右侧,填写" y"方向。在那之后,只要它填充两个方向,第二个可以在任何一侧。

如果您想使用grid,请务必添加sticky选项,以便框架填充给定的空间:

self.fr_main.grid(row=0, column=0, sticky="nsew")
self.fr_second.grid(row=0, column=0, sticky="nsew")

使用grid,您还需要为列提供权重,以便网格知道如何分配额外空间

self.root.grid_rowconfigure(0, weight=1)
self.root.grid_columnconfigure(0, weight=1)
self.root.grid_columnconfigure(1, weight=1)