当执行python代码时,gui为空

时间:2013-04-17 19:19:38

标签: python user-interface tkinter

每当我执行此代码时,gui上都没有显示任何内容。如果我使用网格放置标签和按钮,它工作正常。如果我使用.place来放置标签,它就不显示任何内容。

from Tkinter import *


class Applet(Frame):
""" First attempt to make the program """
    def __init__(self, master):
            """ initialize the frame """
            Frame.__init__(self,master)
            self.login()
    #self.Signup()
    def login(self):
            self.Login_username = StringVar()
            self.Login_password = StringVar()
            self.Label1 = Label(self, text = 'Username: ').place(x = 0, y = 0)
            self.Label2 = Label(self, text = 'Password: ').place(x =50, y = 0)
            self.loguser = Entry(self, textvariable = self.Login_username, width = 15).place(x = 0, y = 10)
            self.logpass = Entry(self, textvariable = self.Login_password, width = 15, show = '*').place(x = 50, y = 10)
            self.button = Button(self, text = 'Login').place(x = 400, y = 0)



Top = Tk()
Top.title('test-gui')
app = Applet(Top)
Top.geometry('700x350')
Top.mainloop()

1 个答案:

答案 0 :(得分:3)

您只是创建了一堆对象并将它们添加到一个本身不会在任何地方添加的接口。

将它们添加到界面的最简单方法是在pack上调用Applet方法。

但是,你仍然会遇到一些问题。

首先,你试图明确place所有元素几乎在彼此之上,所以它们都会在一大堆混乱中重叠。

其次,place方法返回None,因此所有成员变量都将是None,而不是实际的小部件。

这是一个解决所有三个问题的版本:

from Tkinter import *

class Applet(Frame):
    """ First attempt to make the program """
    def __init__(self, master):
            """ initialize the frame """
            Frame.__init__(self,master)
            self.login()
    #self.Signup()
    def login(self):
            self.Login_username = StringVar()
            self.Login_password = StringVar()
            self.Label1 = Label(self, text = 'Username: ')
            self.Label1.place(x = 0, y = 0)
            self.Label2 = Label(self, text = 'Password: ')
            self.Label2.place(x = 100, y = 0)
            self.loguser = Entry(self, textvariable = self.Login_username, width = 15)
            self.loguser.place(x = 0, y = 20)
            self.logpass = Entry(self, textvariable = self.Login_password, width = 15, show = '*')
            self.logpass.place(x = 100, y = 20)
            self.button = Button(self, text = 'Login')
            self.button.place(x = 400, y = 20)

Top = Tk()
Top.title('test-gui')
app = Applet(Top)
app.pack(fill='both', expand=True)
Top.geometry('700x350')
Top.mainloop()

但是,您通常最好使用方框和pack方法,而不是显式调用place。例如,x = 100而不是x = 50等在我的系统上工作,使一切都很好 - 但如果你的系统有不同的默认字体大小,小部件边界等,它将结束重叠或奇怪的间隔。