如何在Python GUI应用中重用CTk标签视图?

0 投票
0 回答
51 浏览
提问于 2025-04-12 04:29

我正在尝试找出如何在我的Python图形界面应用程序中重用带有文本框的标签视图,使用的是CTK库。目前我采用的方法是删除所有的标签视图,然后创建一个新的标签视图,并在里面填充数据。

这样做非常麻烦,因为每次重新创建标签视图时,都会导致我的图形界面变得扭曲和卡顿。我希望能找到一种方法,可以重用现有的标签视图,或者预先创建三个默认的标签视图,每个标签视图里面都有一个文本框,然后只需重新写入数据和标签视图的标题。我在这方面遇到了困难,不知道有没有我遗漏的解决办法?如果能提供一些处理卡顿和界面扭曲的方法,我将非常感激。

def update_tabview(self, data_list):
    if self._prev_data_list == data_list:
        return

    self._prev_data_list = data_list.copy() if data_list else None
    my_tabview = self.tabview
    current_tabs = my_tabview._name_list.copy()

    for tab in current_tabs:
        my_tabview.delete(tab)

    if len(data_list) == 0:
        my_tabview.add("Default TabView")

    else:
        for data in data_list:
            name = data["name"]
            my_tabview.add(name)

            textbox = ctk.CTkTextbox(my_tabview.tab(name), wrap="word",
                                              font=("Helvetica", 14, "bold"), width=380, height=260)
            textbox.grid(row=0, column=0, padx=(5, 5), pady=(5, 10), sticky="nsew")

            textbox.insert(tk.END, "TEXT" + "\n" + "\n")
            textbox.insert(tk.END, data["a"] + "\n")

            textbox.insert(tk.END, "\n" + "TEXT" + "\n\n")
            for text in data["b"]:
                textbox.insert(tk.END, text + "\n")

            textbox.insert(tk.END, "\n" + "TEXT" + "\n\n")
            for text in data["c"]:
                textbox.insert(tk.END, text + "\n")

            textbox.insert(tk.END, "\n" + "TEXT" + "\n\n")
            for text in data["d"]:
                textbox.insert(tk.END, text + ", ")

            textbox.configure(state='disabled')

0 个回答

暂无回答

撰写回答