我的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_())
答案 0 :(得分:0)
创建一个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]))
答案 1 :(得分:0)
你应该在调用self.layout()之前初始化你的布局,例如你可以在 init 函数中创建一个QVBoxLayout,另外,我认为你可以改变
def __init__(self):
super().__init__()
到
def __init__(self, parent = None):
super(Fenster, self).__init__(parent)
vl = QVBoxLayout()
self.setLayout(vl)
答案 2 :(得分:0)
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()