Python PyQt进度条忙

2024-10-02 06:23:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现了几个与此类似的问题,例如:

但是大多数的例子和答案都在1个GUI线程和1个数据处理线程上。在

让我解释一下我的设想。在

我有三门课:

  1. 类主窗口(继承自QMainWindow类并充当主GUI)
  2. 类LogInWidget(继承自QWidget同学们。这个类由所有用户名/密码字段+进度条组成,请参见下图)

LogInWidget

3.class DataTableWidget(继承自QWidget类组成显示几十万个数据的表)

程序的设计使得一旦用户通过LogInWidget登录到程序,他就可以看到DataTableWidget显示的所有数据。在

我使用.setCentralWidget方法来设置LogInWidget和{}(例如,如果用户密码正确,我使用

table = DataTableWidget ()
self.setCentralWidget(table)

显示表格。在

我的问题是:当用户登录时,在看到数据表之前有一个很大的GUI冻结,因为有太多的数据条目要通过表显示。在

所以我想在程序完成加载表之前显示一个繁忙的进度条(在我的LogInWidget)上。在

我曾想过使用Qthread来完成它,但由于显示进度条和创建DataTableWidget并将其设置为centralwidget这两个任务都是GUI任务,我应该如何处理它?在


Tags: 数据进度条用户程序密码withbargui
2条回答

您必须将进度条值连接到来自DataTableWidget的信号。但这反过来又假设DataTableWidget在呈现信号时多次生成该信号,这是不可能的。也许您所需要的只是一种显示GUI繁忙的方式,就像条上有一条线在条的两端之间来回移动。这样就不需要在这两个小部件之间交换数据。在

没有直截了当的方法。不过,这里有一个想法:

正如@scholli所说,您需要DataTableWidget在渲染时发出一个信号。这样的信号并不存在。即使有,也不会被处理,直到小部件被呈现

但是,如果DataTableWidget有一个模型,您可以用您自己的方法覆盖data()方法,它只调用基类的data()方法并更新进度条(尽管只在第一次呈现表时更新进度条,而不是在随后对data()的调用期间更新进度条)。当视图呈现时,视图将多次调用data()方法。这样可以在渲染过程中访问时间点。在

{7{redraw>很可能无法通过调用cdraw>来返回进程控制。在

请注意,这是相当老套的,在一般不好的实践中,它完全破坏了模型-视图范式。我不建议这样做。但我想不出有什么办法能达到同样的结果。也许您可以加快DataTableWidget的呈现。例如,QTableView.resizeColumnsToContents()就是众所周知的慢。你在哪打电话?在

相关问题 更多 >

    热门问题