tkinter网格对齐:Python 2.7

tkinter网格对齐:Python 2.7,python,tkinter,Python,Tkinter,当我在文本框中添加时,网格对齐有问题 我已经设置了一个带有3列宽显示的简单GUI。作为GUI的一部分,我有一个用于输入注释的文本框和一个用于定义数字范围的微调框 如果我从激活代码中删除文本框,我的微调框将与所有其他条目正确对齐,但当我将文本框放置在网格中时,我的微调框将移到右侧 自旋框代码相对于文本框的位置似乎无关紧要,一旦文本框出现,自旋框就会向右移动 在这个阶段,我看不出是什么导致了这个问题 我承认我是新来的 这是导致问题的特定代码行: self.newText.grid(row=displ

当我在文本框中添加时,网格对齐有问题

我已经设置了一个带有3列宽显示的简单GUI。作为GUI的一部分,我有一个用于输入注释的文本框和一个用于定义数字范围的微调框

如果我从激活代码中删除文本框,我的微调框将与所有其他条目正确对齐,但当我将文本框放置在网格中时,我的微调框将移到右侧

自旋框代码相对于文本框的位置似乎无关紧要,一旦文本框出现,自旋框就会向右移动

在这个阶段,我看不出是什么导致了这个问题

我承认我是新来的

这是导致问题的特定代码行:

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如上所述,我要感谢您在评论和格式化您自己编写的代码片段方面所做的努力,因为这强调了您对社区的尊重,您向社区成员寻求帮助。谢谢。我喜欢这样的解决方案。令人惊讶的是,一双新鲜的眼睛看到了什么。不知道我盯着它看了多久,没有发现。