Python Tkinter-框架内的框架导致问题

时间:2018-10-12 07:21:04

标签: python

我正在使用pack方法在python GUI中创建一个表格,学生可以通过“请求”帮助输入名称。

下面是我的代码的修改和简化版本。

import tkinter as tk

class App(object):
def __init__(self, master):
    self._master = master
    master.title = 'Table'
    master.geometry('600x600')
    frame = tk.Frame(master).pack()
    button = tk.Button(frame, text="Ask for help", 
                        command=self.request_help)
    button.pack(side=tk.TOP)

    # frame for hashtag
    self._hashtagframe = tk.Frame(frame)
    self._hashtagframe.pack(side=tk.LEFT)

    # frame for Names
    self._nameframe = tk.Frame(frame)
    self._nameframe.pack(side=tk.LEFT)

    # frame for buttons
    self._timeframe = tk.Frame(frame).pack(side=tk.LEFT)

def request_help(self):
    name = "BOB" # they enter some name
    num = "number" # they are some number
    namelabel=tk.Label(self._nameframe, text=name).pack(side=tk.TOP)
    numlabel=tk.Label(self._hashtagframe, text=num).pack(side=tk.TOP)
    student_timeframe = tk.Frame(self._timeframe).pack(side=tk.TOP)
    redbutton = tk.Button(student_timeframe, command=blah1)
    redbutton.pack(side=tk.LEFT)
    greenbutton= tk.Button(student_timeframe, command=blah2)
    greenbutton.pack(side=tk.LEFT)

当学生输入他们的姓名时,在按钮框中必须显示一个红色和绿色的按钮。我试图通过创建一个框架来将这两个按钮放到同一“行”中,但是,当我运行此代码时,这两个按钮向侧面倾斜。

我尝试更改所有内容,但文本和2个按钮一直向右移。有人知道为什么吗?

1 个答案:

答案 0 :(得分:1)

你做

student_timeframe = tk.Frame(self._timeframe).pack(side=tk.TOP, anchor=tk.W, expand=True)

这会将pack()的返回值存储在student_timeframe中的None中。
因此,您实际上并没有在此框架中打包timelabelredbuttongreenbutton,因为您将None作为其父级传递,这使其默认为根窗口

像这样分割行

student_timeframe = tk.Frame(self._timeframe)
student_timeframe.pack(side=tk.TOP, anchor=tk.W, expand=True)

以便student_timeframe实际上拥有对框架的引用。