customtkinter 和 Pandas 之间的性能问题

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

我用customtkinter制作了一个桌面应用程序,将txt文件提取到excel中。该应用程序有一个文件选择器按钮和提取按钮。文件选择器将打开txt文件并读取txt文件中的表,提取按钮将进行一些数据操作。我遇到了一些有关性能的问题,当用户单击按钮时,应用程序将在 pandas 提取/进行数据操作时被冻结。我也已经使用另一个线程来进行数据提取。

这里是打开文件的按钮代码:

btn = ctk.CTkButton(master=frame, text='Browse', width=100, command=lambda: Thread(target=self.__select_file).start())

打开文件事件处理程序基本上会让用户选择文件并检查txt文件中的表,然后返回结果对象。该复选框将根据要提取的结果对象启用/禁用。这里是代码:

def __select_file(self):
    __file_types = [
      ('Listing file', ['*psilst*', '*saclst*, *pstlst*', '*psilst', '*saclst', '*pstlst', '*psilst', 'psilst*', 'saclst*', 'pstlst*', 'saclst', 'pstlst']),
      ('All file', '*.*')
    ]
    self.__reset_checkbox_state()
    file = ctk.filedialog.askopenfile(title='Open listing file', initialdir='./', filetypes=__file_types)
    if file == None:
      self.__set_app_status('No file selected')
      self.__listing_file['name'].set('No file selected')
      self.__listing_file['file'] = None
      return

    filename = file.name.split('/')[-1]
    self.__listing_file['name'].set(filename)
    self.__listing_file['file'] = ReadTextFile(file) ## custom class here

    self.__set_app_status('Checking tables in listing file')
    result = None
    self.__set_submit_btn_config(state=ctk.DISABLED)
    result = check_listing_file_table(self.__listing_file['file'])

    for key in result:
      checked_table: bool = result[key]
      state = "normal" if checked_table else "disabled"
      temp_key = '_'.join(key.split('_')[1:])
      self.__set_checkbox_config(key=temp_key, state=state)

    self.__set_app_status('Finish checking tables')
    self.__set_submit_btn_config(state=ctk.NORMAL)

有什么建议可以让应用程序在提取txt文件时不被冻结吗?我使用了Thread,但是当文件较大时,应用程序仍然被冻结。

python pandas dataframe tkinter customtkinter
1个回答
0
投票

考虑从 pandas 切换到 Polars-

根据他们的网站,他们的性能提升高达 50 倍 - pandas 和 Polars 之间的切换非常容易,因为在基本层面上,它们的工作方式非常相似。

如果性能是您关心的问题,那么这将是您的最佳解决方案。

可以在 pola.rs 上找到该文档 - 强烈推荐,我使用它作为生成器程序来分析数百行数据,并且从未遇到任何性能问题。

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