使用Tkinter创建GUI

时间:2015-08-03 20:25:42

标签: user-interface python-3.x tkinter

我最初使用.pack方法设置了我的GUI但是意识到会有一些我需要使用.grid的实例并且以我正在做的方式一起使用这两个实例导致我的应用程序冻结所以我决定以不同的方式设计我的GUI。我决定将GUI的所有主要组件划分为包含的帧(TOP,LEFT,RIGHT,BOTTOM)。对于我的标签和按钮,我试图使用.grid方法将它们放在这四个框架中。它有点工作。虽然我不确定我是否正确地采取行动。例如,我的状态栏位于屏幕的底部,但它不会像以前那样拉伸屏幕的整个长度(当我使用pack作为一切时)。我已经尝试改变了柱子并使用粘性,但似乎没有任何效果。我是Python的新手,也是使用Tkinter的新手。我错过了什么?任何帮助或指导将非常感激。以下是我的代码中的一些内容,因此您可以看到我如何设置所有内容/调用它。

    # set up frame for editing fields
    self.editFrame = Frame(self.mainGui, width=325, bd=1, relief=RIDGE,     bg="#BFC0C2")
    self.albumFrame = Frame(self.editFrame, width=315, height=265, bd=1,  relief=RIDGE, bg="#5F817C")
    self.toolFrame = Frame(self.mainGui)
    self.statusFrame = Frame(self.mainGui)
    self.mainFrame = Frame(self.mainGui)

    # setup toolbar, status bar and important buttons
    self.toolbar = Frame(self.toolFrame)
    self.importTracks = Button(self.toolbar, text="Import Tracks", command=self.importTracks)
    self.autoFill = Button(self.toolbar, text="Auto-Fill Fields", command=self.autoFillFields)
    self.exportStationBuilder = Button(self.toolbar, text="Export - StationBuilder", command=self.openStationBuilder)
    self.status = Label(self.statusFrame, text="",    bd=1, relief=SUNKEN, anchor=W, bg="#BFC0C2", padx=5)

    # place frame for editing fields
    self.editFrame.pack(side=RIGHT, fill=BOTH)
    self.editFrame.update()
    self.toolFrame.pack(side=TOP, fill=X, padx=2, pady=2)
    self.statusFrame.pack(side=BOTTOM, anchor=S, fill=X, expand=YES)
    self.mainFrame.pack(side=LEFT, expand=YES)

    # place toolbar, status bar and important buttons
    self.importTracks.grid(row=0, column=0)
    self.autoFill.grid(row=0, column=1)
    self.exportStationBuilder.grid(row=0, column=2)
    self.toolbar.pack(side=TOP, fill=X)
    self.status.grid(row=0, columnspan=1000, sticky=S)

1 个答案:

答案 0 :(得分:1)

不需要columnspan = 1000。 columnspan定义了相对于其他小部件的宽度。假设你有两个小部件,一个在第0列,另一个在第1列。如果你将下一个小部件放在set columnspan = 2下面的一行,这个小部件将是上面2的组合宽度。要使其填满整个列,您需要使用

sticky = W+E or "we" or WE 

取决于python版本,以及如何导入tk。这基本上是拉伸东西方。水平。除此之外,您可能需要在父窗口小部件上使用columnconfigure,很可能是这样的框架

framename.columnconfigure(0, weight = 1)

这告诉窗口小部件使用它获得的额外空间。

PS。我不太喜欢网格,当我想要小部件填充框架时,我只是为它们分别制作一个并使用包。简单,没有列配置等。