QlistWidget PyQT5. Добавлять виджеты из открытого сокета
Пытаюсь по событию нажатия кнопки динамически добавить в Qlistwidget виджеты, сделать это не получается видимо потому что все делаю в одном потоке. Подскажите как реализовать.
from threading import Thread
from PyQt6 import QtCore, QtGui, QtWidgets
import UDP_socket
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1152, 1034)
font = QtGui.QFont()
font.setPointSize(10)
MainWindow.setFont(font)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(20, 520, 1121, 431))
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label_3 = QtWidgets.QLabel(self.layoutWidget)
self.label_3.setEnabled(False)
font = QtGui.QFont()
font.setPointSize(14)
self.label_3.setFont(font)
self.label_3.setTextFormat(QtCore.Qt.TextFormat.PlainText)
self.label_3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label_3.setObjectName("label_3")
self.verticalLayout_2.addWidget(self.label_3)
self.listWidget_2 = QtWidgets.QListWidget(self.layoutWidget)
self.listWidget_2.setObjectName("listWidget_2")
self.verticalLayout_2.addWidget(self.listWidget_2)
self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget1.setGeometry(QtCore.QRect(20, 20, 1121, 431))
self.layoutWidget1.setObjectName("layoutWidget1")
self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget1)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.textBrowser = QtWidgets.QTextBrowser(self.layoutWidget1)
self.textBrowser.setObjectName("textBrowser")
self.verticalLayout.addWidget(self.textBrowser)
self.splitter_3 = QtWidgets.QSplitter(self.centralwidget)
self.splitter_3.setGeometry(QtCore.QRect(760, 460, 381, 27))
self.splitter_3.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.splitter_3.setObjectName("splitter_3")
self.layoutWidget2 = QtWidgets.QWidget(self.splitter_3)
self.layoutWidget2.setObjectName("layoutWidget2")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget2)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.splitter = QtWidgets.QSplitter(self.layoutWidget2)
self.splitter.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.splitter.setObjectName("splitter")
self.label_2 = QtWidgets.QLabel(self.splitter)
self.label_2.setMaximumSize(QtCore.QSize(41, 16777215))
font = QtGui.QFont()
font.setPointSize(12)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.portnum = QtWidgets.QLineEdit(self.splitter)
self.portnum.setMaximumSize(QtCore.QSize(91, 16777215))
self.portnum.setObjectName("portnum")
self.horizontalLayout.addWidget(self.splitter)
self.comboBox = QtWidgets.QComboBox(self.layoutWidget2)
font = QtGui.QFont()
font.setPointSize(12)
self.comboBox.setFont(font)
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.horizontalLayout.addWidget(self.comboBox)
self.openport = QtWidgets.QPushButton(self.splitter_3)
font = QtGui.QFont()
font.setPointSize(12)
self.openport.setFont(font)
self.openport.setFocusPolicy(QtCore.Qt.FocusPolicy.WheelFocus)
self.openport.setAutoRepeat(False)
self.openport.setObjectName("openport")
self.openport.clicked.connect(self.take_raw_data)
self.layoutWidget3 = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget3.setGeometry(QtCore.QRect(650, 960, 486, 29))
self.layoutWidget3.setObjectName("layoutWidget3")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.layoutWidget3)
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.label_5 = QtWidgets.QLabel(self.layoutWidget3)
font = QtGui.QFont()
font.setPointSize(12)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
self.horizontalLayout_3.addWidget(self.label_5)
self.comboBox_3 = QtWidgets.QComboBox(self.layoutWidget3)
font = QtGui.QFont()
font.setPointSize(12)
self.comboBox_3.setFont(font)
self.comboBox_3.setObjectName("comboBox_3")
self.comboBox_3.addItem("")
self.comboBox_3.addItem("")
self.comboBox_3.addItem("")
self.horizontalLayout_3.addWidget(self.comboBox_3)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_4 = QtWidgets.QLabel(self.layoutWidget3)
font = QtGui.QFont()
font.setPointSize(12)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.horizontalLayout_2.addWidget(self.label_4)
self.comboBox_2 = QtWidgets.QComboBox(self.layoutWidget3)
font = QtGui.QFont()
font.setPointSize(12)
self.comboBox_2.setFont(font)
self.comboBox_2.setObjectName("comboBox_2")
self.comboBox_2.addItem("")
self.comboBox_2.addItem("")
self.horizontalLayout_2.addWidget(self.comboBox_2)
self.horizontalLayout_3.addLayout(self.horizontalLayout_2)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setEnabled(False)
self.label.setGeometry(QtCore.QRect(20, 0, 1119, 23))
font = QtGui.QFont()
font.setPointSize(14)
self.label.setFont(font)
self.label.setTextFormat(QtCore.Qt.TextFormat.PlainText)
self.label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label_3.setText(_translate("MainWindow", "DECODED DATA"))
self.label_2.setText(_translate("MainWindow", "Port"))
self.comboBox.setItemText(0, _translate("MainWindow", "UDP"))
self.comboBox.setItemText(1, _translate("MainWindow", "TCP SERVER"))
self.comboBox.setItemText(2, _translate("MainWindow", "TCP CLIENT"))
self.openport.setText(_translate("MainWindow", "Open "))
self.label_5.setText(_translate("MainWindow", "BYTE STAFFING"))
self.comboBox_3.setItemText(0, _translate("MainWindow", "RAW"))
self.comboBox_3.setItemText(1, _translate("MainWindow", "DLE"))
self.comboBox_3.setItemText(2, _translate("MainWindow", "DLE + CRC"))
self.label_4.setText(_translate("MainWindow", "ASTERIX CATEGORY"))
self.comboBox_2.setItemText(0, _translate("MainWindow", "CAT 150"))
self.comboBox_2.setItemText(1, _translate("MainWindow", "CAT 62"))
self.label.setText(_translate("MainWindow", "RAW DATA"))
def add_too_list(self, data):
line = str.upper(data.hex(' ', 1))
self.listWidget_2.addItem(line)
def take_portnum(self):
port = self.portnum.text()
return port
def take_raw_data(self):
try:
self.port = int(self.take_portnum())
self.sock = UDP_socket.UdpSocket(self.port)
except OSError:
pass
self.add_too_list(self.sock.datarcv())
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: Kazay
→ Ссылка
Справился. Запустил добавление в Qlistwidget в отдельный поток и все полетело