Я пытаюсь сделать простой GUI ввод данных в словарь. Большинство вещей, которые я нахожу в Интернете, записывают Tkinter прямо в .py, но я хочу использовать функцию для рисования окна и другую функцию для выполнения своих задач после нажатия кнопки.
Короткий код:
def main_window():
window = tk.Tk()
build_window(window)
window.mainloop()
def build_window(window):
entry_name = tk.Entry(window)
button_go = tk.Button(window, text="Run", command=lambda: write_dict())
button_go.grid(row=7, column=1, sticky="e", padx=2, pady=2)
def write_dict():
i_dict = {}
i_dict["name"] = entry_name.get()
main_window()
И я получаю AttributeError: module 'tkinter' has no attribute 'entry_name'
. Я пробовал разными способами получить window
в write_dict (), но я никогда не мог использовать .get () для чтения значений внутри поля ввода.
как мне это сделать?
Полный код:
import tkinter as tk
import tkinter.scrolledtext as tkst
from PyQt5.QtWidgets import QApplication
d_list = []
def main_window():
window = tk.Tk()
window.title("New Entry")
build_window(window)
window.mainloop() # Main Loop, nothing runs after here on Gui
def build_window(window):
label_title = tk.Label(window, text="NEW ENTRY")
label_name = tk.Label(window, text="Name:")
entry_name = tk.Entry(window)
label_link = tk.Label(window, text="Link:")
entry_link = tk.Entry(window)
label_xpath = tk.Label(window, text="XPath:")
entry_xpath = tk.Entry(window)
label_active = tk.Label(window, text="Active:")
chbox_active = tk.Checkbutton(window, variable=1, text="Active")
label_comment = tk.Label(window, text="Comment:")
entry_comment = tkst.ScrolledText(window, width=40, height=4, font=("roboto", 8))
botton_cancel = tk.Button(window, text="Done", command=lambda: close_window(window))
button_go = tk.Button(window, text="Run", command=lambda: write_dict())
label_title.grid (row=0, column=1, sticky="nwse", padx=2, pady=2)
label_name.grid (row=1, column=0, sticky="e", padx=2, pady=2)
entry_name.grid (row=1, column=1, sticky="nwse", padx=2, pady=2)
label_link.grid (row=2, column=0, sticky="e", padx=2, pady=2)
entry_link.grid (row=2, column=1, sticky="nwse", padx=2, pady=2)
label_xpath.grid (row=3, column=0, sticky="e", padx=2, pady=2)
entry_xpath.grid (row=3, column=1, sticky="nwse", padx=2, pady=2)
label_active.grid (row=4, column=0, sticky="e", padx=2, pady=2)
chbox_active.grid (row=4, column=1, sticky="w", padx=2, pady=2)
label_comment.grid (row=5, column=0, sticky="e", padx=2, pady=2)
entry_comment.grid (row=5, column=1, sticky="w", padx=2, pady=2)
window.grid_rowconfigure(6, minsize=20) # Empty?
botton_cancel.grid(row=7, column=0, sticky="w", padx=2, pady=2) # Cancel Button
button_go.grid(row=7, column=1, sticky="e", padx=2, pady=2) # Write Dict Button
def close_window(window):
window.destroy()
def write_dict():
global d_list
i_dict = {}
i_dict["name"] = entry_name.get()
i_dict["link"] = entry_link.get()
i_dict["xpath"] = entry_xpath.get()
i_dict["active"] = chbox_active.get()
i_dict["comment"] = entry_comment.get()
print(i_dict)
pass
main_window()
РЕДАКТИРОВАТЬ: Полные ошибки - это 2, первая связана с текущим опубликованным кодом, вторая - с передачей «окна» в кнопку.
Traceback (most recent call last):
File "C:\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "C:/Users/Chris/Google Drive/Python/html_new_entry.py", line 50, in <lambda>
button_go = tk.Button(window, text="Run", command=lambda: write_dict())
File "C:/Users/Chris/Google Drive/Python/html_new_entry.py", line 78, in write_dict
i_dict["name"] = entry_name.get()
NameError: name 'entry_name' is not defined
Traceback (most recent call last):
File "C:\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "C:/Users/Chris/Google Drive/Python/html_new_entry.py", line 50, in <lambda>
button_go = tk.Button(window, text="Run", command=lambda: write_dict(window))
File "C:/Users/Chris/Google Drive/Python/html_new_entry.py", line 78, in write_dict
i_dict["name"] = window.entry_name.get()
File "C:\Python\Python38\lib\tkinter\__init__.py", line 2345, in __getattr__
return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute 'entry_name'