使用类()和tkinter创建第二帧

使用类()和tkinter创建第二帧,tkinter,Tkinter,我的问题是,如果不使用grid(),我无法将滚动条放入我的列表框中。除非创建第二个帧,否则无法使用grid()。我正在努力使用类创建第二个框架。下面是我使用该类的代码。我没有尝试将def labels()添加到我的init,因为它会抛出一个使用grid()的语法。我想对我的def列表框使用grid()。。。所以,如果我创建第二个帧,我应该能够使用grid()来处理这两个帧,如果它们在自己的帧中。我希望如此 #!/usr/bin/python #!/home/lubuntu/subscriptio

我的问题是,如果不使用grid(),我无法将滚动条放入我的列表框中。除非创建第二个帧,否则无法使用grid()。我正在努力使用类创建第二个框架。下面是我使用该类的代码。我没有尝试将def labels()添加到我的init,因为它会抛出一个使用grid()的语法。我想对我的def列表框使用grid()。。。所以,如果我创建第二个帧,我应该能够使用grid()来处理这两个帧,如果它们在自己的帧中。我希望如此

#!/usr/bin/python
#!/home/lubuntu/subscription_app

from Tkinter import *
from ttk import *
#from subscription_app.enter import *
import tkFileDialog


class start(Frame):

    def __init__(self, parent):
        self.parent = parent
        Frame.__init__(self, parent)
        self.initUI()
        self.menubar()
        self.onExit()
        self.statusbar()
        self.bottom_button()
        self.listbox()

    def initUI(self):
        self.parent.title("sfgsdfsdsdfsdy")
        self.centerWindow()
        self.pack()

    def menubar(self):
        menubar = Menu(self.parent)
        self.parent.config(menu=menubar)
        fileMenu = Menu(menubar)
        menubar.add_cascade(label="File", menu=fileMenu)
        fileMenu.add_command(label="???")#command=)
        fileMenu.add_separator()
        fileMenu.add_command(label="Exit", command=self.onExit)

    def labels(self):
        lbl1 = Label(self, text="Members List:")
        lbl2 = Label(self, text="Member Information:")
        lbl1.grid(row=0, column=0, sticky=W)
        lbl2.grid(row=0, column=1, sticky=W)

    def listbox(self):
        lb = Listbox(self, selectmode=SINGLE)
        lb.pack(expand=True, fill=Y)
        scrollbar = Scrollbar(self, orient="vertical")
        scrollbar.pack(side=RIGHT, fill=Y)
        for line in range(100):
            lb.insert(END, "This is line number " + str(line))

    def statusbar(self):

        status = Label(self, text="preparing to do nothing", relief=SUNKEN, anchor=S)
        status.pack(expand=TRUE, side=BOTTOM, fill=X)

    def bottom_button(self):
        saveButton = Button(self, text="Save member details") ##, command=)
        saveButton.pack(side=BOTTOM, padx=5, pady=5)
        addButton = Button(self, text="Add member")
        addButton.pack(side=LEFT)

    def onExit(self):
        self.quit()

    def centerWindow(self):
        w = 600
        h = 500
        sw = self.parent.winfo_screenwidth()
        sh = self.parent.winfo_screenheight()
        x = (sw - w)/2
        y = (sh - h)/2
        self.parent.geometry('%dx%d+%d+%d' % (w, h, x, y))


def main():

    root = Tk()
    app = start(root)
    root.mainloop() 

if __name__ == '__main__':
    main()
下面是另一批代码,它不使用类,所有内容都是手动输入的,这样可以更好地显示应用程序。我宁愿使用我的顶级代码,学习如何正确地做事

#!/usr/bin/python
#!/home/lubuntu/subscription_app

from Tkinter import *
from ttk import *
#from subscription_app.enter import *
import tkFileDialog


window = Tk()
window.configure(bg='lightgrey')
window.title("sgdfsdfdsfsdy")
## resize screen ##
w = 600
h = 500
sw = window.winfo_screenwidth()
sh = window.winfo_screenheight()
x = (sw - w)/2
y = (sh - h)/2
window.geometry('%dx%d+%d+%d' % (w, h, x, y))
## text above boxes ##
lbl1 = Label(window, text="Members List:")
lbl2 = Label(window, text="Member Information:")
lbl1.grid(row=0, column=0, sticky=W)
lbl2.grid(row=0, column=1, sticky=W)
## boxes resize with screen ##
frm = Frame(window)
frm.grid(row=1, column=0, sticky=N+S)
window.rowconfigure(1, weight=1)
window.columnconfigure(1, weight=1)
## member list box with scroll ##
scrollbar = Scrollbar(frm, orient="vertical")
scrollbar.pack(side=RIGHT, fill=Y)
listNodes = Listbox(frm, width=20, yscrollcommand=scrollbar.set, font=("Helvetica", 12))
listNodes.pack(expand=True, fill=Y)
scrollbar.config(command=listNodes.yview)
## member details box ##
listSelection = Listbox(window, height=4, font=("Helvetica", 12))
listSelection.grid(row=1, column=1, sticky=E+W+N)
## all buttons ##
saveButton = Button(window, text="Save member details") ##, command=)
saveButton.grid(row=1, column=1, sticky=W)
addButton = Button(window, text="Add member")
addButton.grid(row=2, column=0, sticky=W, pady=10)
deleteButton = Button(window, text="delete member")
deleteButton.grid(row=2, column=0, pady=10)
## status bar ##
status = Label(window, text="preparing to do nothing", relief=SUNKEN, anchor=S)
status.grid(sticky=W+E, columnspan=2)
## menu bar ##
menubar = Menu(window)
window.config(menu=menubar)
fileMenu = Menu(menubar)
menubar.add_cascade(label="File", menu=fileMenu)
fileMenu.add_command(label="???")#command=)
fileMenu.add_separator()
fileMenu.add_command(label="Exit") #command=window.onExit)
   # def onExit(self):
      # self.quit()


for x in range(100):
    listNodes.insert(END, x)

for x in "ABCD":
    listSelection.insert(END, x + ": ?")

window.mainloop()

我不太明白问题出在哪里。如果您想创建一个列表框和滚动条,并将它们放在一个框架中,这就是您所要做的一切:创建一个框架,并将列表框和滚动条放在其中

def listbox(self):

    # create the frame
    lbframe = Frame(self)
    lbframe.pack(side="left", expand=True, fill=Y)

    # create a listbox and scrollbar as children of the frame
    lb = Listbox(lbframe, selectmode=SINGLE)
    scrollbar = Scrollbar(lbframe, orient="vertical")

    # pack the listbox and scrollbar in the frame
    lb.pack(side="left", expand=True, fill=BOTH)
    scrollbar.pack(side=RIGHT, fill=Y)

    for line in range(100):
        lb.insert(END, "This is line number " + str(line))

如果只想对列表框和滚动条使用
grid
,当然可以这样做。在这种情况下,我不确定它是否比使用
pack
有任何好处

我在代码中只看到一帧。“第二帧”的代码在哪里?还有,为什么你认为你必须使用
网格
?是的,我尝试了很多方法来创建另一个框架,但我完全做错了,哈哈。所以把它全部删除了,所以在这里发布代码是可行的,而不是发布我所有的错误。。。同样,如果您使用网格测试第二个代码。它在GUI上运行得非常好。啊,这太令人沮丧了。。。我想我想得太多了。它工作得很好。非常感谢。也谢谢你添加评论,我将和我的比较,看看我在做什么。