沉默的菜鸟 发表于 2019-9-21 17:42

一个关于PyQt的问题

本帖最后由 沉默的菜鸟 于 2019-9-21 18:44 编辑

我写了一个关于读取亚马逊云aws的SQS里面的消息的带界面的PyQt小程序,但在获取完消息,刷新界面时发现界面没变化,不知道怎么办,求大佬帮忙。

我用一个计时器与这个函数连接,当计时器timeout时,调用这个函数来刷新主界面,但主界面好像没变化


代码如下:

def changeTable(self):
      global myQueue
      while not myQueue.empty():
            # 加锁
            lock.acquire()
            msg = myQueue.get()
            # 释放锁
            lock.release()

            msg = json.loads(msg)
            rowcount = self.tableWidget.rowCount()
            if 'Messages' in msg:
                data = dict(msg['Messages'])['Body']
                templist = str(msg['ResponseMetadata']['HTTPHeaders']['date']).split(' ')
                date = templist + ' ' + templist
                senderId = str(dict(msg['Messages'])['Attributes']['SenderId']).split('=')
                item_1 = QTableWidgetItem(str(rowcount))
                item_2 = QTableWidgetItem(str(date))
                item_3 = QTableWidgetItem(str(senderId))
                item_4 = QTableWidgetItem(str(data))
                self.tableWidget.setItem(rowcount, 0, item_1)
                self.tableWidget.setItem(rowcount, 1, item_2)
                self.tableWidget.setItem(rowcount, 2, item_3)
                self.tableWidget.setItem(rowcount, 3, item_4)
                self.tableWidget.viewport().update()
                QApplication.processEvents()
            else:
                print('No message')

Xw丶小威 发表于 2019-9-21 18:25

在主线程中操作关于UI的动作。例如,增删改刷新tablewidget否则会造成刷新不成功,界面假死等。何不试试呢

沉默的菜鸟 发表于 2019-9-21 18:36

Xw丶小威 发表于 2019-9-21 18:25
在主线程中操作关于UI的动作。例如,增删改刷新tablewidget否则会造成刷新不成功,界面假死等。何不试试 ...

我这是通过信号与槽在主线程的操作,而且我调试的时候这些代码都是执行了的,但界面就是没变化,{:1_937:}

沉默的菜鸟 发表于 2019-9-21 18:44

搞定了,忘了加一个InsertRow了{:1_924:}
页: [1]
查看完整版本: 一个关于PyQt的问题