如何在 tkinter 中永久添加按钮?
How to add a button permanently in tkinter?
在 python tkinter 中有没有一种方法可以在您向页面添加按钮时永久执行此操作,即使您停止并再次 运行 程序也是如此?
就像您要将按钮添加到数据库一样。
我不知道是否有办法将小部件放入 sql table...
您不能在数据库中存储 tkinter 对象。解决方案是将信息添加到文件或数据库中,以允许您在启动应用程序时重新创建按钮。例如,您可以将按钮标签保存到数据库中的一行,并在启动时读取行并为每一行创建一个按钮。
这里有一个完整的程序来说明这个过程。请注意,每次创建按钮时,都会从条目小部件中检索文本并将其添加到数据库中。在启动时,代码将查询数据库并重新创建按钮。
import tkinter as tk
import sqlite3
def init_db():
global db
db = sqlite3.connect("buttons.sqlite")
cursor = db.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS buttons (id INTEGER PRIMARY KEY AUTOINCREMENT, label VARCHAR)")
def add_button():
button_text = entry.get() or "Button"
entry.delete(0, "end")
create_button(button_text)
save_button(button_text)
def save_button(button_text):
cursor = db.cursor()
cursor.execute("INSERT INTO buttons(label) VALUES(?)", (button_text,))
db.commit()
def create_button(button_text):
button = tk.Button(root, text=button_text)
button.pack(side="top")
def restore_buttons():
cursor = db.cursor()
cursor.execute("SELECT id, label from buttons")
for (row_id, button_text) in cursor.fetchall():
create_button(button_text)
root = tk.Tk()
toolbar = tk.Frame(root)
toolbar.pack(side="bottom", fill="x")
button = tk.Button(toolbar, text="Add Button", command=add_button)
entry = tk.Entry(toolbar)
entry.pack(side="left")
button.pack(side="left")
init_db()
restore_buttons()
root.mainloop()
在 python tkinter 中有没有一种方法可以在您向页面添加按钮时永久执行此操作,即使您停止并再次 运行 程序也是如此? 就像您要将按钮添加到数据库一样。 我不知道是否有办法将小部件放入 sql table...
您不能在数据库中存储 tkinter 对象。解决方案是将信息添加到文件或数据库中,以允许您在启动应用程序时重新创建按钮。例如,您可以将按钮标签保存到数据库中的一行,并在启动时读取行并为每一行创建一个按钮。
这里有一个完整的程序来说明这个过程。请注意,每次创建按钮时,都会从条目小部件中检索文本并将其添加到数据库中。在启动时,代码将查询数据库并重新创建按钮。
import tkinter as tk
import sqlite3
def init_db():
global db
db = sqlite3.connect("buttons.sqlite")
cursor = db.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS buttons (id INTEGER PRIMARY KEY AUTOINCREMENT, label VARCHAR)")
def add_button():
button_text = entry.get() or "Button"
entry.delete(0, "end")
create_button(button_text)
save_button(button_text)
def save_button(button_text):
cursor = db.cursor()
cursor.execute("INSERT INTO buttons(label) VALUES(?)", (button_text,))
db.commit()
def create_button(button_text):
button = tk.Button(root, text=button_text)
button.pack(side="top")
def restore_buttons():
cursor = db.cursor()
cursor.execute("SELECT id, label from buttons")
for (row_id, button_text) in cursor.fetchall():
create_button(button_text)
root = tk.Tk()
toolbar = tk.Frame(root)
toolbar.pack(side="bottom", fill="x")
button = tk.Button(toolbar, text="Add Button", command=add_button)
entry = tk.Entry(toolbar)
entry.pack(side="left")
button.pack(side="left")
init_db()
restore_buttons()
root.mainloop()