Python Tkinter网格未按需要设置
我正在我的应用程序中使用Python Tkinter网格未按需要设置,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在我的应用程序中使用tkinter,我用以下代码设置了一个框架: from tkinter import * from tkinter import ttk from tkinter import simpledialog class View: def __init__(self,tab): self.tab1 = tab self.widgets() def proxy_checkbox_clicked(self, event=No
tkinter
,我用以下代码设置了一个框架:
from tkinter import *
from tkinter import ttk
from tkinter import simpledialog
class View:
def __init__(self,tab):
self.tab1 = tab
self.widgets()
def proxy_checkbox_clicked(self, event=None):
if self.proxyVar.get() == 0:
self.proxyIPTextEdit.config(state=DISABLED)
self.proxyPortTextEdit.config(state=DISABLED)
self.proxyUserTextEdit.config(state=DISABLED)
self.proxyPassTextEdit.config(state=DISABLED)
else:
self.proxyIPTextEdit.config(state=NORMAL)
self.proxyPortTextEdit.config(state=NORMAL)
self.proxyUserTextEdit.config(state=NORMAL)
self.proxyPassTextEdit.config(state=NORMAL)
def widgets(self):
self.mainFrame = Frame(self.tab1)
self.mainFrame.grid(column = 0, row = 0, padx = 0, pady = 0)
# Set Add Frame
self.loginFrame = Frame(self.mainFrame)
self.loginFrame.grid(column = 0, row = 0, padx = 0, pady = 0)
label = Label(self.loginFrame, text = "Name:")
label.grid(column = 0, row = 0, sticky = 'W')
self.nameTextEdit = Entry(self.loginFrame, width = 20)
self.nameTextEdit.grid(column = 1, row = 0)
label = Label(self.loginFrame, text = "Phone:")
label.grid(column = 0, row = 1, sticky = 'W')
self.phoneTextEdit = Entry(self.loginFrame, width = 20)
self.phoneTextEdit.grid(column = 1, row = 1)
self.proxyVar = IntVar()
self.proxyCheckBox = Checkbutton(self.loginFrame, text="Use Proxy", variable=self.proxyVar, command=self.proxy_checkbox_clicked)
self.proxyCheckBox.grid(column = 0, row = 2)
self.proxyFrame = Frame(self.loginFrame)
self.proxyFrame.grid(column = 0, row = 3)
label = Label(self.proxyFrame, text = "IP:")
label.grid(column = 0, row = 0, sticky = 'W')
self.proxyIPTextEdit = Entry(self.proxyFrame, width = 20)
self.proxyIPTextEdit.grid(column = 1, row = 0)
label = Label(self.proxyFrame, text = "Port:")
label.grid(column = 0, row = 1, sticky = 'W')
self.proxyPortTextEdit = Entry(self.proxyFrame, width = 20)
self.proxyPortTextEdit.grid(column = 1, row = 1)
label = Label(self.proxyFrame, text = "User:")
label.grid(column = 0, row = 2, sticky = 'W')
self.proxyUserTextEdit = Entry(self.proxyFrame, width = 20)
self.proxyUserTextEdit.grid(column = 1, row = 2)
label = Label(self.proxyFrame, text = "Password:")
label.grid(column = 0, row = 3, sticky = 'W')
self.proxyPassTextEdit = Entry(self.proxyFrame, width = 20)
self.proxyPassTextEdit.grid(column = 1, row = 3)
self.proxyIPTextEdit.config(state=DISABLED)
self.proxyPortTextEdit.config(state=DISABLED)
self.proxyUserTextEdit.config(state=DISABLED)
self.proxyPassTextEdit.config(state=DISABLED)
self.addButton = Button(self.loginFrame, text="Login", width = 10)
self.addButton.grid(column = 0, row = 4)
当我运行它时,我得到了这个框架,你知道问题出在哪里吗?少了什么?
您的问题是
self.proxyFrame
填充了self.loginFrame
的第1列。根据定义,第2列中的任何内容都必须位于第1列的右侧。一个简单的解决方案是让框架跨越两列—第1列和第2列。这样,self.proxyFrame
将不会强制第1列与整个帧一样宽
self.proxyFrame.grid(column = 0, row = 3, padx=20, pady=20, columnspan=2)
至于检查按钮。。。默认情况下,小部件集中在网格分配给它们的空间中。如果要使其左对齐,请在将其添加到网格时添加sticky=“w”
self.proxyCheckBox.grid(column = 0, row = 2, sticky="w")
整个proxyFrame
占据了loginFrame
的一列,因此loginFrame
中所有列号较高的内容都必须位于proxyFrame
的右侧。一种可能是将columnspan=2
添加到proxyFrame
。另一种方法是完全去掉proxyFrame
,将所有内容都放在一个网格中。将proxyFrame
的列span
增加到2
。如下所示:proxyFrame.grid(列=0,行=3,列span=2)