【问题标题】:Positioning dynamically added labels using Tkinter pack manager使用 Tkinter 包管理器定位动态添加的标签
【发布时间】:2021-11-16 20:56:07
【问题描述】:

我正在尝试在按下按钮后动态pack() 标签。但是由于某种原因,这些标签被添加到被点击的按钮下,而不是按钮所在的整个框架下,即使新标签的主标签是按钮的主标签。

我尝试使用许多 sideanchor 选项组合,但似乎没有任何效果。

工作示例及其输出:


from tkinter import *

class AddSButton(Button):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.config(command=self.click_function)

    def click_function(self):
        # for item in self.master.winfo_children():
        l = Label(self.master, text="texttexttext")
        l.pack(anchor=W)


class Application(Frame):

    def __init__(self, master=None):
        self.setLounge = 21.0
        Frame.__init__(self, master)

        self.frame = LabelFrame(self.master)
        self.frame.grid(row=0, column=0)

        self.frame_input_sc = LabelFrame(self.frame)
        self.frame_input_sc.pack()

        self.input_s_id = Entry(self.frame_input_sc, width=3, borderwidth=3)
        self.input_s_id.grid(row=0, column=0)  # columnspan=3, , sticky=W+E
        self.input_s_id.insert(0, "Id")

        self.input_s_name = Entry(self.frame_input_sc, width=20, borderwidth=3)
        self.input_s_name.grid(row=0, column=1)
        self.input_s_name.insert(0, "Enter text...")

        btn_add_sc = Button(self.frame_input_sc, text="Add", command=self.add_sc_clicked)
        btn_add_sc.grid(row=0, column=2)

    def add_sc_clicked(self):
        sc = self.input_s_name.get().strip()
        id = self.input_s_id.get().strip()

        frame_s = LabelFrame(self.frame)
        frame_s.pack(fill=X)

        lbl_s_id = Label(frame_s, text=id + "    ")
        lbl_s_name = Label(frame_s, text=sc)

        lbl_s_id.grid(row=0, column=0, sticky=N + S)
        lbl_s_name.grid(row=0, column=1, sticky=N + S)

        frame_add_step = LabelFrame(frame_s)
        frame_add_step.grid(row=1, column=0, columnspan=2, sticky=N + S + W + E)

        input_s = Entry(frame_add_step, width=50, borderwidth=3)
        input_s.pack(side=LEFT, anchor=NW)
        input_s.insert(0, "Enter s...")

        btn_add_s = AddSButton(frame_add_step, text="Add")
        btn_add_s.pack(fill=X, anchor=NW)

root = Tk()
app = Application(master=root)
app.mainloop()

【问题讨论】:

    标签: python tkinter tkinter-layout


    【解决方案1】:

    您已将入口小部件添加到frame_add_step 的左侧,这导致它被分配到框架的整个左侧。所有新的小部件都将添加到条目小部件的右侧。这是打包器工作方式的一个基本方面。

    您要么需要将条目和“添加”按钮放在封装到frame_add_step 顶部的框架中,以便标签可以封装在下面,要么您需要使用grid

    【讨论】:

      猜你喜欢
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多