0

我一直在尝试为我正在制作的定义测试程序创建一个小型 GUI。我的 GUI 需要如下所示:

Word: # label, then entry widget
Definition: # label, entry widget
Part of Speech: # label, then entry widget
Go Quit # each are buttons

这是我到目前为止所拥有的:

from Tkinter import *

class GetWord:
    def __init__(self, master):
        self.frame = Frame(master)
        self.frame.pack()
        self.wordL = Label(self.frame, text = 'Word: ')
        self.wordL.pack(side = 'left')
        self.wordE = Entry(self.frame)
        self.wordE.pack(side = 'right', after=self.wordL)
        self.defL = Label(self.frame, text = 'Definitions: ')
        self.defL.pack(side = 'left', after=self.wordE)
        self.defE = Entry(self.frame)
        self.defE.pack(side = 'right', after=self.defL)
        self.posL = Label(self.frame, text = 'Part of Speech: ')
        self.posL.pack(side = 'left', after=self.defE)
        self.posE = Entry(self.frame)
        self.posE.pack(side = 'right', after=self.posL)
        self.buttonE = Button(self.frame, text = 'Go', command = self.getInfo)
        self.buttonE.pack(side='bottom', after=self.posE)
        self.quitB = Button(self.frame, text = 'Quit', fg = 'red', command = self.frame.quit)
        self.quitB.pack(side='bottom', after=self.buttonE)
    def getInfo(self):
        print self.wordE.get(), self.defE.get(), self.posE.get()

root = Tk()
f = GetWord(root)
root.mainloop()

但是,他们不排队。如何将它们分别关联为“行”(一个标签,每个“行”一个条目,最后一个“行”与两个按钮)/

另外,我不确定这部分是如何工作的:

root = Tk()
f = GetWord(root)
root.mainloop()

root不直接引用GetWord类,所以我不知道它是如何工作的。如果有人可以向我解释这一点,那就太好了。谢谢!

4

2 回答 2

2

为此,您必须替换packgrid。使用时grid,必须先命名小部件(例如)f = Label(#info)。然后,您设置grid,这与 pack 类似,但允许更多控制。f.grid(row =1, column = 1, sticky = W). 要了解更多关于grid,请看这里:http ://effbot.org/tkinterbook/grid.htm

于 2013-02-17T03:10:20.070 回答
1

至于第二部分,root确实访问GetWord类。root = Tk()将 root 设置为 Tkinter 窗口。通过说f = GetWord(root),您将主窗口设置为root,这意味着所做的任何事情f都在具有名称的窗口中root。然后,GetWord做它的__init__方法。root.mainloop()告诉窗口运行并等待主窗口中所需的任何更改(如识别按钮按下或其他事件)。没有这个,窗口将不会做任何事情。

于 2013-02-17T03:16:47.177 回答