我一直在尝试为我正在制作的定义测试程序创建一个小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
课程,因此我不知道它是如何工作的。如果有人可以向我解释这一点,那就太棒了。谢谢!
答案 0 :(得分:2)
为此,您必须将pack
替换为grid
。使用grid
时,您必须先命名小部件(例如)f = Label(#info)
。然后,设置grid
,类似于pack,但允许更多控制。 f.grid(row =1, column = 1, sticky = W)
。要了解有关grid
的更多信息,请查看此处:http://effbot.org/tkinterbook/grid.htm
答案 1 :(得分:1)
关于第二部分,root
确实访问了GetWord
类。 root = Tk()
将root设置为Tkinter窗口。通过说f = GetWord(root)
,您将主窗口设置为root
,这意味着对f
所做的任何操作都在名称为root
的窗口中。然后,GetWord
执行其__init__
方法。 root.mainloop()
告诉窗口运行并等待主窗口中所需的任何更改(如识别按钮推送或其他事件)。没有它,窗口将不会做任何事情。