【问题标题】:How can I make a self-generating button?如何制作自生成按钮?
【发布时间】:2021-11-15 02:30:02
【问题描述】:

我正在尝试创建一个函数,该函数将在每次使用提交到数据库函数时创建一个以变量命名的按钮(提交到我的数据库的每个数据集都有一个按钮)。目前我可以让按钮为自己命名,但每次使用它时我都无法抵消这条线。我可以添加一个简单的计数器并设置 row=n,但在这一点上,我不确定我解决问题的方法是最好的。对于每个数据集,都需要为其生成一个按钮。最好通过尝试运行一个基于我的数据集制作按钮的程序(不完全确定我将如何做到这一点)或让我的提交返回一个带有 row=counter 的按钮来解决这个问题?还是有其他我没有想到的解决方案?

**注意:回顾一下,我的按钮在程序重新启动后不会停留,这是有道理的。如果我要使用提交/计数器解决方案,我还必须在代码中自行存储数据。

**最小可重现代码:

from tkinter import *
root = Tk()
root.title('Button')
root.geometry('400x400')
f_name = Entry(root, width=30)
f_name.grid(row=0, column=1)
f_name_lbl = Label(root, text="First Name:")
f_name_lbl.grid(row=0, column=0)

def gen_button():
    auto_button = Button(root, text=f_name.get())
    auto_button.grid(row=2, column=0, columnspan=2)

submit_btn = Button(root, text="Submit:", command=gen_button).grid(row=1, column=0, columnspan=2, ipadx=100)

我相信我做对了,我很抱歉我是 python 和堆栈溢出的新手

【问题讨论】:

  • 这个问题太模糊了。请尝试创建一个不需要外部数据库的minimal reproducible example
  • @BryanOakley 我用一个最小的例子更新了它,我很抱歉。
  • 您可以使用.grid_size() 获取网格布局中使用的列数和行数。所以就像Button(...).grid(row=root.grid_size()[1], ...)
  • @acw1668 所以这将是一个活动数据库,记录将被频繁添加和更新。根据我对您的解决方案和 grid_size 函数的理解,它不会每次都偏移行,也不会将按钮存储在程序中。除了让这些按钮偏移之外,我在关闭程序后也无法让它们留下来
  • 如何让按钮出现,以及如何让它们在销毁并重新启动 GUI 后持续存在,是两个独立的问题,需要在两个独立的问题中提出。

标签: python-3.x sqlite tkinter button


【解决方案1】:

如果不指定行,grid 会自动选择最后占用行之后的下一行。

auto_button.grid(column=0, columnspan=2)

不过,如果您为这些按钮创建单独的框架,您可以使用pack,这会更容易一些,因为pack 将小部件沿一侧对齐。在您的情况下,您希望它们与框架的顶部对齐,就在任何其他小部件的下方。

def gen_button():
    auto_button = Button(button_frame, text=f_name.get())
    auto_button.pack(side="top")

submit_btn = Button(root, text="Submit:", command=gen_button)
submit_btn.grid(row=1, column=0, columnspan=2, ipadx=100)

button_frame = Frame(root)
button_frame.grid(row=2, column=0, columnspan=2, sticky="nsew")

【讨论】:

  • 我刚刚看了你的评论。我将为它开始一个新线程。谢谢
猜你喜欢
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多