为什么我的 tkinter 列表框一直在移动?

Why does my tkinter Listbox keep moving?

我一直在尝试在 tkinter (Python 3) 中创建一个简单的调查问卷,但我遇到了一个问题,每当我在其下方编辑标签时,我的列表框就会移动。

为了说明我的意思,这里有两张图:http://imgur.com/a/4v92O

谁能帮我理解为什么盒子不会静止不动?

class Questionnaire(Frame):
# GUI


def __init__(self, master):

    # Initialise

    Frame.__init__(self,master)
    self.grid()
    self.createProgSelect()
    self.createQuestions()

def createProgSelect(self):

    # Degree programme label

    lblProg = Label(self, text='Degree Programme:', font=('MS', 8,'bold'))
    lblProg.grid(row=1, column=0, columnspan=2, sticky=NE)

    # Listbox

    self.listProg.configure(yscrollcommand=scroll.set)
    self.listProg = Listbox(self, height= 3)
    self.listProg.grid(row=1, column=2, columnspan=2, sticky=E)

    # Scrollbar

    scroll = Scrollbar(self, command= self.listProg.yview)
    scroll.grid(row=1, column=4, sticky=W)

    # Listbox items

    for item in ["CS", "CS with", "BIS", "SE", "Joints",""]:
        self.listProg.insert(END, item)

    self.listProg.selection_set(END)


def createQuestions(self):

    # Strongly agree

    lblStrAgr = Label(self, text = 'Strongly \n Agree', font=('MS', 8,'bold'))
    lblStrAgr.grid(row=3, column= 4, rowspan=2)

    # Partly agree

    lblStrAgr = Label(self, text = 'Partly \n Agree', font=('MS', 8,'bold'))
    lblStrAgr.grid(row=3, column= 5, rowspan=2)

    # Partly disagree

    lblStrAgr = Label(self, text = 'Partly \n Disagree', font=('MS', 8,'bold'))
    lblStrAgr.grid(row=3, column= 6, rowspan=2)

    # Strongly disagree

    lblStrAgr = Label(self, text = 'Strongly \n Disagree', font=('MS', 8,'bold'))
    lblStrAgr.grid(row=3, column= 7, rowspan=2)

    self.varQ1 = IntVar()

    # Label for question 1

    Q1Label = Label(self, text='1. Short text')
    Q1Label.grid(row=5, column=0)

    # Radio buttons for question 1

    R1Q1 = Radiobutton(self, variable=self.varQ1, value=4)
    R1Q1.grid(row=5, column= 4)

    R2Q1 = Radiobutton(self, variable= self.varQ1, value=3)
    R2Q1.grid(row=5, column= 5)

    R3Q1 = Radiobutton(self, variable= self.varQ1, value=2)
    R3Q1.grid(row=5, column= 6)

    R4Q1 = Radiobutton(self, variable= self.varQ1, value=1)
    R4Q1.grid(row=5, column= 7) 

抱歉这个有点愚蠢的问题。

您正在创建网格。网格意味着特定列中的所有项目具有相同的宽度,并且特定行中的所有项目具有相同的高度。例如,如果给定列的宽度增加,则右侧的所有列都会自然移动以腾出空间。

您的列表框在第 3 列。您的标签在第 0 列。当您将标签配置为具有非常宽的文本时,它会导致第 0 列扩展以容纳标签。这会导致以下所有列移动。

我猜测解决方案是让您的标签跨越三列 (...grid(..., columnspan=3)),但我不确定您要完成什么。