Мне нужна помощь в решении этой проблемы, я знаю, что это длинная запись, но эта проблема меня беспокоит, и я часами искал ответ без решения.
Яразработка программного обеспечения Tkinter с несколькими окнами для навигации пользователя.В каждом окне будет набор вопросов, на которые нужно ответить, и цель состоит в том, чтобы сохранить все эти ответы в отдельный файл.Для простоты обслуживания я разработал каждое окно в отдельном файле, чтобы можно было легче отслеживать ошибки и изменения в самих окнах.
Не думаю, что проблема связана с использованием самого Tkinter, но я вставляю весь код (1 создание окна и 2 класса для определения вопросников), чтобы он был действующим рабочим кодом.
Если я изолирую одну анкету и создаю window = tk.Tk()
для ее проверки, я могу использовать переменную de, но с представленной архитектурой №.
Мой код создания окна:
import tkinter as tk, Questions1 as q1, Questions2 as q2
#Software initial_class
class HAS(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, *kwargs)
#Page configure
tk.Tk.wm_title(self, "Checklist")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
container.configure(background = "white")
#Adding overhead menu
menubar = tk.Menu(container)
filemenu = tk.Menu(menubar, tearoff = 0)
filemenu.add_command(label = "Save", command = print("In development"))
filemenu.add_command(label = "Exit", command= self.destroy)
menubar.add_cascade(label="File", menu=filemenu)
tk.Tk.config(self, menu=menubar)
#Defining the page_frames
self.frames = {}
for F in (q1.Q1, q2.Q2):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(q1.Q1)
#showing the selected frame
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
app = HAS()
app.geometry("530x700")
app.mainloop()
Моя первая страница анкеты:
import tkinter as tk
from tkinter import ttk
FONT = ("Arial", 11)
choices_y_n = ['-', 'Yes', 'No']
Questionlist_a = ["A. Is true?:", "B. Is True? :","C. Is True? :", "D. True? :"]
def save_values():
global y
y = list(map(lambda x: x.get(), qt))
print(y)
class Q1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.columnconfigure(0, minsize=100)
self.columnconfigure(1, minsize=150)
self.columnconfigure(2, minsize=50)
#Header Config
tk.Frame.configure(self, background = "white")
#tk.Label(self, image=Logo, background="white").grid(row=0, column=0, padx=100, columnspan=3, pady=10, sticky="W")
ttk.Label(self, text="1st Checklist", font = FONT, background = "white").grid(row=1, column=0, columnspan=3, pady = 10)
ttk.Label(self, text="Questions: ", background="white").grid(row=2, column=0,columnspan=2, padx=10, pady = 10, sticky="W")
#Questions
global qt
qt = [tk.StringVar(self) for i in range(len(Questionlist_a))]
for r in range(len(Questionlist_a)):
ttk.Label(self, text=Questionlist_a[r], background = "white").grid(row= r+3, column=0, columnspan=2, padx=10, pady = 10, sticky="W")
ttk.OptionMenu(self, qt[r], *choices_y_n).grid(row = r+3, column=2, padx=10, sticky="WE")
r=+1
#Buttons
ttk.Button(self, text="Save values", command = save_values, width=18).grid(row=16, column=0, padx=10, pady=15, sticky="W")
ttk.Button(self, text="Questions 2", command = lambda: controller.show_frame(__import__('Questions2').Q2),width=18).grid(row=17, column=0, padx=10, pady=15, sticky="W")
, а моя вторая анкета:
import tkinter as tk
from tkinter import ttk
FONT = ("Arial", 11)
choices_y_n = ['-', 'Yes', 'No']
Questionlist_b = ["E. Is true?:", "F. Is True? :","G. Is True? :", "H. True? :"]
def save_values():
global y
y = list(map(lambda x: x.get(), qt))
print(y)
class Q2(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.columnconfigure(0, minsize=100)
self.columnconfigure(1, minsize=150)
self.columnconfigure(2, minsize=50)
#Header Config
tk.Frame.configure(self, background = "white")
ttk.Label(self, text="2nd Checklist", font = FONT, background = "white").grid(row=1, column=0, columnspan=3, pady = 10)
ttk.Label(self, text="Questions: ", background="white").grid(row=2, column=0,columnspan=2, padx=10, pady = 10, sticky="W")
#Questions
global qt
qt = [tk.StringVar(self) for i in range(len(Questionlist_b))]
for r in range(len(Questionlist_b)):
ttk.Label(self, text=Questionlist_b[r], background = "white").grid(row= r+3, column=0, columnspan=2, padx=10, pady = 10, sticky="W")
ttk.OptionMenu(self, qt[r], *choices_y_n).grid(row = r+3, column=2, padx=10, sticky="WE")
r=+1
#Buttons
ttk.Button(self, text="Save values", command = save_values, width=18).grid(row=16, column=0, padx=10, pady=15, sticky="W")
ttk.Button(self, text="Questions 1", command = lambda: controller.show_frame(__import__('Questions1').Q1),width=18).grid(row=17, column=0, padx=10, pady=15, sticky="W")
Этот код может печатать ответы из функций save_values
, но я не могунайдите способ сохранить эти списки в словаре или списке списков.
Может кто-нибудь помочь мне с этим?
Большое спасибо!