tkinter网格对齐:Python 2.7
当我在文本框中添加时,网格对齐有问题 我已经设置了一个带有3列宽显示的简单GUI。作为GUI的一部分,我有一个用于输入注释的文本框和一个用于定义数字范围的微调框 如果我从激活代码中删除文本框,我的微调框将与所有其他条目正确对齐,但当我将文本框放置在网格中时,我的微调框将移到右侧 自旋框代码相对于文本框的位置似乎无关紧要,一旦文本框出现,自旋框就会向右移动 在这个阶段,我看不出是什么导致了这个问题 我承认我是新来的 这是导致问题的特定代码行:tkinter网格对齐:Python 2.7,python,tkinter,Python,Tkinter,当我在文本框中添加时,网格对齐有问题 我已经设置了一个带有3列宽显示的简单GUI。作为GUI的一部分,我有一个用于输入注释的文本框和一个用于定义数字范围的微调框 如果我从激活代码中删除文本框,我的微调框将与所有其他条目正确对齐,但当我将文本框放置在网格中时,我的微调框将移到右侧 自旋框代码相对于文本框的位置似乎无关紧要,一旦文本框出现,自旋框就会向右移动 在这个阶段,我看不出是什么导致了这个问题 我承认我是新来的 这是导致问题的特定代码行: self.newText.grid(row=displ
self.newText.grid(row=display_row, column=0, columnspan=4, padx=10, pady=10).
下面是示例代码。如果我注释掉上面的行,旋转框将正确对齐,如果它存在,则旋转框将偏移。只有spinbox会受到影响,标签、条目、RadioButton或文本小部件都不会受到影响,但spinbox会受到影响。这些是我的GUI所需的唯一小部件
谢谢你的帮助
#-------------------------------------------------------------------------------
# Name: MyGUI
# Purpose: Problem Sample
#
#-------------------------------------------------------------------------------
from Tkinter import *
#===============================
# GUI Class
#===============================
class GUIClass():
'''
GUI class
'''
def __init__(self):
self.displayframe = 0
self.NameVar = StringVar()
self.NumVar = StringVar() # shouldn't be but it works
self.ButtonVar = BooleanVar()
#===============================
# Function for standard button
def StandardEntry(self, display_row,labeltext,entryvar):
'''
Standard 'Entry' feature for GUI.
'''
Label(self.displayframe, text=labeltext).grid(row=display_row, column=0, sticky=W)
name = Entry(self.displayframe, textvariable=entryvar)
name.grid(row=display_row, column=1, sticky=W)
display_row+=1
def BooleanRadioButton(self, display_row, labeltext, entryvar):
'''
Boolean true/false radio button function
'''
Label(self.displayframe, text=labeltext).grid(row=display_row, column=0, sticky=W)
ButtonOn = Radiobutton(self.displayframe, text="Enabled", variable=entryvar, value=True)
ButtonOn.grid(row=display_row, column=1, sticky=W)
ButtonOn = Radiobutton(self.displayframe, text="Disabled", variable=entryvar, value=False)
ButtonOn.grid(row=display_row, column=2, sticky=W)
def StandardSpinBox(self, display_row, labeltext, min_value, max_value, variablename):
'''
Standard spinbox for this project.
'''
Label(self.displayframe, text=labeltext).grid(row=display_row, column=0, sticky=W)
spinboxwidget = Spinbox(self.displayframe, from_=min_value, to=max_value, textvariable=variablename)
spinboxwidget.grid(row=display_row, column=1)
def AddFreeTextForm(self, display_row, notes):
'''
Standard widget for free text entry
'''
self.newText = Text(self.displayframe, width=50, height=8, takefocus=0)
self.newText.grid(row=display_row, column=0, columnspan=4, padx=10, pady=10)
def movesettingstoclass(self, dataclass):
dataclass.NameVar = self.NameVar.get()
dataclass.NumVar = int(self.NumVar.get())
dataclass.ButtonVar = self.ButtonVar.get()
def populate(self, dataclass):
'''
Takes the data in the data structure and populates the GUI.
'''
self.NameVar.set(dataclass.NameVar)
self.NumVar.set(str(dataclass.NumVar))
self.ButtonVar.set(dataclass.ButtonVar)
#===============================
# Data Class
#===============================
class DataClass():
def __init__(self):
self.NameVar = 'SomeName'
self.NumVar = 11
self.ButtonVar = False
def showvalues(self):
'''
Debug function/method for checking values are set correctly.
'''
msg += 'NameVar : %s\n' %self.NameVar
msg += 'NumVar : %d\n' %self.NumVar
msg += 'KVVar : %d\n' %self.KVVar
if self.ButtonVar == True:
msg += 'ButtonVar: True\n'
else:
msg += 'ButtonVar: False\n'
print msg
#=============================================
# Main window
#=============================================
root = Tk()
MyData = DataClass()
mainGUI = GUIClass()
root.title('Problem Example')
menu = Menu(root)
root.config(menu=menu)
#==============================================================================
# text fields to be entered by the user...
display_row = 0
Notes = ''
mainGUI.displayframe = Frame(root)
#==============================================================================
# Some entry input parameter
mainGUI.StandardEntry(display_row, "Some Label", mainGUI.NameVar)
display_row+=1
#==============================================================================
# Some spinbox input parameter
mainGUI.StandardSpinBox(display_row, "Some Label", 3, 21, mainGUI.NumVar)
display_row+=1
#==============================================================================
# Some Radiobutton input parameter
SwitchOn = mainGUI.BooleanRadioButton(display_row, "Button Label", mainGUI.ButtonVar)
display_row+=1
Label(mainGUI.displayframe, text="Configuration Notes").grid(row=display_row, column=1, sticky=W)
display_row += 1
#notes = mainGUI.AddFreeTextForm(display_row, "Configuration Notes", MyData.Notes)
notes = mainGUI.AddFreeTextForm(display_row, Notes)
display_row+=1
mainGUI.displayframe.pack(anchor='w')
#==============================================================================
# and the magic all happens here
mainloop()
调用spinbox“
grid
方法时,您忘记设置sticky
参数
spinboxwidget.grid(row=display_row, column=1, sticky=W)
顺便说一句,根据,请不要在赋值(或其他)运算符周围添加多个空格以使其与另一个运算符对齐。@Lafexlos充分考虑到所有Python增强工作,StackOverflow代码段通常不会成为任何Python发行版/Python PEP进程代码库的一部分。因此,智能阅读格式更容易读入结构,对于帮助这个帮助和想法丰富的社区的人们的任何代码审查/代码响应都更有帮助。我们是这里的人——而不是JIT编译器(希望如此):o@Chris G如上所述,我要感谢您在评论和格式化您自己编写的代码片段方面所做的努力,因为这强调了您对社区的尊重,您向社区成员寻求帮助。谢谢。我喜欢这样的解决方案。令人惊讶的是,一双新鲜的眼睛看到了什么。不知道我盯着它看了多久,没有发现。