0

我已经开始编写一个程序,其中我第一次使用了组合框,现在我想将它与网格对齐。但是,我的问题是它总是出现在我所有小部件的最底部(图片:http: //i.imgur.com/uTzyOFB.png ?1 )。另外,这是我的代码:

from tkinter import *
from tkinter import ttk

class Application(ttk.Frame):
    """A application"""
    def __init__(self, master):
        Frame.__init__(self, master)
        self.grid()
        self.create_widgets()

def create_widgets(self):
    """this creates all the objects in the window"""

    self.title_lbl = ttk.Label(self,text = "Title"
                               ).grid(column = 0, row = 0,sticky = W)
    self.label = ttk.Label(self, text = "label"
                                           ).grid(column = 0,
                                                  row = 1,sticky = W)
    self.combovar = StringVar()
    self.combo = ttk.Combobox(self.master,textvariable = self.combovar,
                                              state = 'readonly')
    self.combo['values'] = ('A', 'B',
                                            'C', 'D',
                                            'E', 'F',
                                            'G', 'H', 'I')
    self.combo.current(0)
    self.combo.grid(column = 0, row = 2, sticky = W)


    self.button1 = ttk.Button(self, text = "Button1"
                              ).grid(column = 0, row = 3,sticky = W)


    self.button2 = ttk.Button(self, text = "Button 2"
                                  ).grid(column = 0, row = 4, sticky = W)




def main():
    """Loops the window"""
    root = Tk()
    root.title("Window")
    root.geometry("500x350")
    app = Application(root)
    root.mainloop()

main()

如您所见,在我的代码中,组合框应该位于第 2 行,位于标签的正下方。相反,它位于第 3 行和第 4 行的 2 个按钮下。我不知道为什么会这样。

我是 python 3.3 的新手,但我对 2.7 相当熟悉。我也是堆栈溢出的新手,所以请多多包涵。欢迎任何帮助。

4

1 回答 1

1

您为 Combobox 小部件使用了不同的父级,因此它不是放置在框架的第三行,而是根元素的第二行(因此,位于框架的标签和按钮下方):

self.label = ttk.Label(self, ...)
# ...
self.combo = ttk.Combobox(self.master, ...)

只需设置self为父级即可解决:

self.combo = ttk.Combobox(self, ...)
于 2013-06-05T21:01:57.727 回答