python - 如何制作自动填充某些条目的 Tkinter GUI
问题描述
我正在尝试使用 Tkinter 制作一个允许您输入 URL 或 ID 的 GUI。
示例 URL:https ://www.fanfiction.net/s/10030860/1/The-Final-Battle 示例 ID:10030860
如您所见,ID 嵌入在 URL 中。我想要两个条目,一个用于输入 URL,一个用于输入 ID。如果用户填写 URL 框,则会自动生成 ID。(如果我将示例 URL 放在 URL 输入框中,我希望自动生成 ID 框中的示例 ID,反之亦然)如果用户填写 ID 框,则自动生成 URL。
更多例子:(括号是假装输入框)
URL: [https://www.fanfiction.net/s/10030860/1/The-Final-Battle] <-- If I fill this in
ID: [10030860] <-- Python fills this in for me
URL: [https://www.fanfiction.net/s/10030860/1/The-Final-Battle] <-- Python fills this in for me
ID: [10030860] <-- If I fill this in
到目前为止,这是我的代码:
import tkinter as tk
from tkinter import ttk
# Define a function to autofill in the URL and ID entries
def autofill_id_url():
fanfic_url.set("https://www.fanfiction.net/s/" + fanfic_id.get() + "/1/")
root.after(100, autofill_id_url)
# Root window
root = tk.Tk()
# Define the labeled frame where we input stuff
input_frame = tk.LabelFrame(master=root, text="Input")
input_frame.grid(row=0, column=0, padx=1, pady=1, rowspan=2, sticky=tk.NS)
# Label for entering URL
ttk.Label(master=input_frame, text="URL:").grid(row=0, column=0, padx=1, pady=1)
# Entry field for URL
fanfic_url = tk.StringVar()
url_entry = ttk.Entry(master=input_frame, textvariable=fanfic_url)
url_entry.grid(row=0, column=1, padx=1, pady=1)
# Label for entering ID
ttk.Label(master=input_frame, text="ID:").grid(row=1, column=0, padx=1, pady=1)
# Entry field for ID
fanfic_id = tk.StringVar()
id_entry = ttk.Entry(master=input_frame, textvariable=fanfic_id)
id_entry.grid(row=1, column=1, padx=1, pady=1)
# Start callback functions
autofill_id_url()
# Start GUI event loop
root.mainloop()
我有填写ID时的部分,URL是自动生成的。但是我不知道如何制作,当您填写 URL 框时,您会得到为您填写的 ID 框。
提前致谢。
解决方案
Enter当在输入框中按下键而不是使用时,最好进行自动填充.after()
。
baseurl = 'https://www.fanfiction.net/s/'
def autofill_url_id(_):
try:
# extract the id from the url
url = fanfic_url.get().strip()
if url.startswith(baseurl):
id = url.split('/')[4]
fanfic_id.set(id)
except IndexError:
print('failed to extract id from the url')
def autofill_id_url(_):
id = fanfic_id.get().strip()
if id:
fanfic_url.set(baseurl+id+'/1/')
...
# Start callback functions
#autofill_id_url()
url_entry.bind('<Return>', autofill_url_id)
id_entry.bind('<Return>', autofill_id_url)
推荐阅读
- android - 从 XML 将输入类型设置为 TextInputEditText
- python - 使用 python 请求获取 ('Connection aborted.', OSError(0, 'Error') 错误
- python - 在 Spacy 中平均向量时忽略词汇表外的单词
- c++ - 带有条件 constexpr 被调用者的 constexpr 函数
- alexa - 是否可以在没有回声设备的情况下测试 alexa“音频播放器”界面
- javascript - 如何从对象数组中获取永远不会出现在特定属性中的值
- c# - Microsoft WebAPI 要求 System.Net.Http,版本=4.0.0.0
- jakarta-ee - 刷新 Payara 中的 Hazelcast 缓存
- javascript - Firebase 仅查询我参与的文档
- java - 三元运算行为怪异