【问题标题】:PyQt GUI RefreshPyQt GUI 刷新
【发布时间】:2018-09-18 13:27:49
【问题描述】:

我的 qt GUI 有问题。 我想每隔一秒更新/刷新我的 GUI,如果列表中有元素,则添加新的文本行或新按钮。看过很多关于线程和 qtimer 的帖子,但对我的 GUI 不太了解。所以我想更新所有内容,或者只是想添加新的,如果通话挂断,它必须被删除。只需添加代码而不尝试刷新,因为它们无法正常工作^^。如果你能帮助我,会帮助我很多:) 谢谢

    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5 import *
    from PyQt5.QtCore import *
    import time
    import CTI
    import APIConnect



    class Fenster(QWidget):
        def __init__(self):
            super().__init__()
            self.initMe()

        def initMe(self):
            i = 1
            box = QVBoxLayout(self)
            self.setLayout(box)
            Rufnummer = 0
            result = APIConnect.list_users()
            anrufe = APIConnect.anrufe()
            for e in result:
                self.User = box.addWidget(QPushButton(e[6]+"\n"+e[7]))
            box.addStretch(1)
            self.setGeometry(50, 50, 200, 750)
            self.setWindowTitle("CTI")
            self.setWindowIcon(QIcon("telefon.png"))
            self.show()

    app = QApplication(sys.argv)
    w = Fenster()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt refresh pyqt5


    【解决方案1】:
    def initMe(self):
        i = 1
        box = QVBoxLayout(self)
        self.setLayout(box)
        Rufnummer = 0
        result = APIConnect.list_users()
        anrufe = APIConnect.anrufe()
        for e in result:
            self.User = box.addWidget(QPushButton(e[6]+"\n"+e[7]))
        box.addStretch(1)
        self.setGeometry(50, 50, 200, 750)
        self.setWindowTitle("CTI")
        self.setWindowIcon(QIcon("telefon.png"))
        #---------------add this--------------------
        self.__timer = QTimer()
        self.__timer.timeout.connect(self.ontimeout)
        self.__timer.start(1000)
        #-------------------------------------------
        self.show()
    

    【讨论】:

      【解决方案2】:

      你应该在调用self.layout()之前初始化你的布局,例如你可以在你的init函数中创建一个QVBoxLayout,另外,我认为你可以改变

      def __init__(self):
          super().__init__()
      

      def __init__(self, parent = None):
          super(Fenster, self).__init__(parent)
          vl = QVBoxLayout()
          self.setLayout(vl)
      

      【讨论】:

        【解决方案3】:

        创建一个 QTimer 并调用这个槽

        def ontimeout(self):
            curLayout = self.layout()
            widgetItem = curLayout.takeAt(0)
            while widgetItem != None:
                curLayout.removeWidget(widgetItem.widget())
                widgetItem = curLayout.takeAt(0)
                result = APIConnect.list_users()
            for e in result:
                curLayout.addWidget(QPushButton(e[6]+"\n"+e[7]))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-28
          • 1970-01-01
          • 2019-02-09
          • 1970-01-01
          • 2018-10-10
          • 2014-08-10
          • 1970-01-01
          相关资源
          最近更新 更多