python - Python 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=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
填充了第 1 列self.loginFrame
。根据定义,第 2 列中的任何内容都必须位于第 1 列的右侧。一个简单的解决方案是让该框架跨越两列 - 第 1 列和第 2 列。这样,self.proxyFrame
不会强制第 1 列与整个框架。
self.proxyFrame.grid(column = 0, row = 3, padx=20, pady=20, columnspan=2)
至于 checkbutton... 默认情况下,小部件在分配给它们的空间中居中grid
。如果您希望它左对齐,sticky="w"
请在将其添加到网格时添加。
self.proxyCheckBox.grid(column = 0, row = 2, sticky="w")
推荐阅读
- python - 使用 Flask 将 JSON 对象中的 HTML 数据渲染到 UI
- visual-studio-code - Visual Studio Code 中这个令人眼花缭乱的主题正常吗?
- python - 如何在多线程任务/时间图中可视化线程?
- python - 可以将类方法创建为非装饰器吗?
- angular - 尝试在 Nativescript Android 插件中实现外部 Java 接口
- r - 当用户拥有超过 5000 个朋友时,rtweet 函数“get_friends()”不返回数据
- java - toast 消息应该显示与触发一样多次,但它只显示一次
- java - 如何面向对象设计一个类易改组件
- r - 如何为现有 R 矩阵中的行和列添加名称
- reactjs - 单击按钮加载特定场景