0

每当我执行此代码时,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()
4

1 回答 1

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 = 100instead ofx = 50等,在我的系统上工作,使所有的东西都很好地布局——但是如果你的系统有不同的默认字体大小、小部件边界等,它最终会重叠或奇怪的间隔。

于 2013-04-17T19:22:56.817 回答