在自定义 tkinter 中切换帧时,条目为空,同时返回到上一帧

问题描述 投票:0回答:1

所以我正在使用自定义 tkinter 编写一个应用程序,我遵循了 option_frame 和 main_frame 的 youtube 教程,所以它非常令人困惑,我的意思是当我使用 basic_page 选择文件时,在我转到 icon_page 并选择图标后,当回到 basic_page 时,它的条目是空的,当我返回 icon_page 时,它也是空的 它是如何工作的 你们可以帮助我吗

def basic_page():
    global input_file_entry, output_file_entry

    # Create StringVar instances for input and output file paths
    input_file_var = StringVar()
    output_file_var = StringVar()

    def choose_input_file():
        input_file = filedialog.askopenfilename(title="Select Input File")
        input_file_var.set(input_file)  # Set the selected file in the StringVar

    def choose_output_file():
        output_file = filedialog.asksaveasfilename(title="Name anything...",)
        output_file_var.set(output_file)  # Set the selected file in the StringVar

    basic_page_frame = CTkFrame(main_frame)

    input_file_entry = CTkEntry(basic_page_frame, textvariable=input_file_var, placeholder_text="write Path to the file u want to encrypt manually", width=450)
    input_file_entry.pack(pady=50)

    input_file_button = CTkButton(basic_page_frame, text="Choose Input file", command=choose_input_file, width=150, corner_radius=40)
    input_file_button.pack()

    output_file_entry = CTkEntry(basic_page_frame, textvariable=output_file_var, placeholder_text="write Path to the output file manually donot add .exe", width=450)
    output_file_entry.pack(pady=50)

    output_file_button = CTkButton(basic_page_frame, text="Save as", command=choose_output_file, width=150, corner_radius=40)
    output_file_button.pack()

    basic_page_frame.pack(fill=BOTH, expand=True)

def icon_page():
    global input_file_entry  # Making input_file_entry a global variable for later use

    # Create StringVar instance for the icon file path
    icon_file_var = StringVar()

    def choose_icon_file():
        icon_path = filedialog.askopenfilename(title="Select Icon", filetypes=[("Icon files", "*.ico")])
        if icon_path:
            icon_file_var.set(icon_path)  # Set the selected file in the StringVar
            input_file_entry.delete(0, END)  # Clear the current entry
            input_file_entry.insert(0, icon_path)  # Set the selected file in the entry
            display_icon(icon_path)

    def display_icon(icon_path):
        icon_image = Image.open(icon_path)
        icon_image = ImageTk.PhotoImage(icon_image)
        display_label.configure(image=icon_image)
        display_label.image = icon_image

    icon_page_frame = CTkFrame(main_frame)

    input_file_entry = CTkEntry(icon_page_frame, textvariable=icon_file_var, placeholder_text="Path to the icon file", width=450)
    input_file_entry.pack(pady=50)

    input_file_button = CTkButton(icon_page_frame, text="Choose Icon .ico", command=choose_icon_file, width=150, corner_radius=40)
    input_file_button.pack()

    display_label = CTkLabel(icon_page_frame, text='')
    display_label.pack(pady=50)

    icon_page_frame.pack(fill=BOTH, expand=True)

这是页面和

def hide_bg():
    basic_indicate.configure(bg_color='transparent')
    assembly_indicate.configure(bg_color='transparent')
    icon_indicate.configure(bg_color='transparent')
    build_indicate.configure(bg_color='transparent')
    advanced_indicate.configure(bg_color='transparent')

def switch(widget,page):
    hide_bg()
    widget.configure(bg_color='blue')

    for fm in main_frame.winfo_children():
        fm.destroy()

    page()

这就是切换方法 下面是主要的应用程序代码

set_appearance_mode("System")  # Modes: system (default), light, dark
app = CTk()

app.geometry("625x625")
app.iconbitmap('icon.ico')
app.title("FG_Crypter")

options_frame = CTkFrame(app)

basic_btn = CTkButton(options_frame,text="Basic",font=("Arial",13), width=125,command=lambda: switch(basic_indicate,basic_page))
basic_btn.place(x=0,y=0)

basic_indicate = CTkLabel(options_frame,text="",bg_color='blue',width=100,height=2)
basic_indicate.place(x=12,y=30)

icon_btn = CTkButton(options_frame,text="Icon",font=("Arial",13), width=125,command=lambda: switch(icon_indicate,icon_page))
icon_btn.place(x=125,y=0)

icon_indicate = CTkLabel(options_frame,text="", width=100,height=2)
icon_indicate.place(x=137,y=30)

Assembly_btn = CTkButton(options_frame,text="Assembly",font=("Arial",13), width=125,command=lambda: switch(assembly_indicate))
Assembly_btn.place(x=250,y=0)

assembly_indicate = CTkLabel(options_frame,text="",width=100,height=2)
assembly_indicate.place(x=262,y=30)

Advanced_btn = CTkButton(options_frame,text="Advanced",font=("Arial",13), width=125,command=lambda: switch(advanced_indicate))
Advanced_btn.place(x=375,y=0)

advanced_indicate = CTkLabel(options_frame,text="",width=100,height=2)
advanced_indicate.place(x=387,y=30)

Build_btn = CTkButton(options_frame,text="Build",font=("Arial",13), width=125,command=lambda: switch(build_indicate))
Build_btn.place(x=500,y=0)

build_indicate = CTkLabel(options_frame,text="",width=100,height=2)
build_indicate.place(x=512,y=30)
options_frame.pack(pady=5)
options_frame.propagate(False)
options_frame.configure(width=650,height=35)
main_frame = CTkFrame(app)
main_frame.pack(fill=BOTH,expand=True)
basic_page()
app.mainloop()
tkinter frames customtkinter
1个回答
0
投票

因此,在构建

basic_page
时,当您设置
input_file_var
output_file_var
并给它一个值
StringVar()
时,您在调用该函数时给它该值(或者换句话说,重置保存的数据)再次。

你已经非常接近了,所要做的就是移动:

input_file_var = StringVar()
output_file_var = StringVar()

将变量放置在仅被调用一次的位置(如开头),以便在定义根对象时可以移动它们,如在

options_frame = CTkFrame(app)

如果您对所使用的代码的这个或其他方面感到困惑,请随时询问,我或这里的某人可以解释:)

© www.soinside.com 2019 - 2024. All rights reserved.