ich versuche in eine QtListWidget mit einem QtListItem das ListItem mit einem RadioButton bzw. einen Trigger an die checkbox der bei Änderung des Status eine Function aufruft.
Ziel ist es das nur eine Checkbox/Radiobutton in dem QTListWidget anklickbar ist.
Das funktioniert leider nicht über über die Funktion item_clicked da die darauf reagiert welches Item ich anklicke unabhängig vom Status der Checkbox.
Hat da jemand eine Idee?
Mir ist das Egal ob es ein QtListWidgetItem ist, es kann auch was anderes sein, Hauptsache es kann nur ein Element aktiv geschaltet werden.
Den Code für die GUI habe ich im QTDesigner erstellt.
Code: Alles auswählen
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow, QApplication, QListWidgetItem, QTableWidgetItem
# from libs.pyqt.base_gui.multi_config_main import Ui_MainWindow
from libs.pyqt.base_gui.tab_test import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.show()
# self.usb_port = self.usb_port_txt.text()
# self.feeder_amount = self.feeder_amount_txt.text()
# self.refill_btn.pressed.connect(self.refill)
# self.send_btn.pressed.connect(self.send)
self.value = 'empty'
self.fill_list_btn.pressed.connect(self.fill_list)
self.test_list = [e for e in range(0,10)]
def refill(self):
print("refill")
def send(self):
print(self.usb_port)
print(self.feeder_amount)
print("send")
def fill_list(self):
if self.listWidget.count() < 10:
for e in self.test_list:
item = QListWidgetItem(str(e))
item.setFlags(item.flags() | Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
# item.setText("w")
item.setCheckState(False)
self.listWidget.addItem(item)
self.listWidget.itemClicked.connect(self.item_clicked)
# if self.listWidget.currentItem() is not None:
# print(f"{self.listWidget.currentItem().text()=}")
# print(f"{self.listWidget.currentRow()=}")
def item_clicked(self):
if self.listWidget.currentItem() is not None:
print(f"{self.listWidget.currentItem().text()=}")
print(f"{self.listWidget.currentRow()=}")
def check_box_clicked(self):
print("checkbox clicked")
app = QApplication(sys.argv)
w = MainWindow()
app.exec_()
Code: Alles auswählen
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'tab_test.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(820, 609)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth())
self.tabWidget.setSizePolicy(sizePolicy)
self.tabWidget.setObjectName("tabWidget")
self.multi_config_tab = QtWidgets.QWidget()
self.multi_config_tab.setObjectName("multi_config_tab")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.multi_config_tab)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.formLayout = QtWidgets.QFormLayout()
self.formLayout.setObjectName("formLayout")
self.usb_port_label = QtWidgets.QLabel(self.multi_config_tab)
self.usb_port_label.setObjectName("usb_port_label")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.usb_port_label)
self.usb_port_txt = QtWidgets.QLineEdit(self.multi_config_tab)
self.usb_port_txt.setObjectName("usb_port_txt")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.usb_port_txt)
self.feeder_amount_label = QtWidgets.QLabel(self.multi_config_tab)
self.feeder_amount_label.setObjectName("feeder_amount_label")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.feeder_amount_label)
self.feeder_amount_txt = QtWidgets.QLineEdit(self.multi_config_tab)
self.feeder_amount_txt.setObjectName("feeder_amount_txt")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.feeder_amount_txt)
self.feeder_type_label = QtWidgets.QLabel(self.multi_config_tab)
self.feeder_type_label.setObjectName("feeder_type_label")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.feeder_type_label)
self.comboBox = QtWidgets.QComboBox(self.multi_config_tab)
self.comboBox.setObjectName("comboBox")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.comboBox)
self.simulation_label = QtWidgets.QLabel(self.multi_config_tab)
self.simulation_label.setObjectName("simulation_label")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.simulation_label)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.simulation_on = QtWidgets.QRadioButton(self.multi_config_tab)
self.simulation_on.setObjectName("simulation_on")
self.horizontalLayout.addWidget(self.simulation_on)
self.simulation_off = QtWidgets.QRadioButton(self.multi_config_tab)
self.simulation_off.setChecked(True)
self.simulation_off.setObjectName("simulation_off")
self.horizontalLayout.addWidget(self.simulation_off)
self.formLayout.setLayout(3, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout)
self.refill_btn = QtWidgets.QPushButton(self.multi_config_tab)
self.refill_btn.setObjectName("refill_btn")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.refill_btn)
self.send_btn = QtWidgets.QPushButton(self.multi_config_tab)
self.send_btn.setObjectName("send_btn")
self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.send_btn)
self.verticalLayout_2.addLayout(self.formLayout)
self.tabWidget.addTab(self.multi_config_tab, "")
self.id_2_ip_tab = QtWidgets.QWidget()
self.id_2_ip_tab.setObjectName("id_2_ip_tab")
self.fill_list_btn = QtWidgets.QPushButton(self.id_2_ip_tab)
self.fill_list_btn.setGeometry(QtCore.QRect(150, 450, 89, 25))
self.fill_list_btn.setObjectName("fill_list_btn")
self.listWidget = QtWidgets.QListWidget(self.id_2_ip_tab)
self.listWidget.setGeometry(QtCore.QRect(20, 20, 256, 351))
self.listWidget.setObjectName("listWidget")
self.tabWidget.addTab(self.id_2_ip_tab, "")
self.verticalLayout.addWidget(self.tabWidget)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 820, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(1)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.usb_port_label.setText(_translate("MainWindow", "USB Port"))
self.usb_port_txt.setText(_translate("MainWindow", "/dev/ttyUSB0"))
self.feeder_amount_label.setText(_translate("MainWindow", "Anzahl Waagen"))
self.feeder_amount_txt.setText(_translate("MainWindow", "1"))
self.feeder_type_label.setText(_translate("MainWindow", "Waagen Typ"))
self.simulation_label.setText(_translate("MainWindow", "Simulation"))
self.simulation_on.setText(_translate("MainWindow", "an"))
self.simulation_off.setText(_translate("MainWindow", "aus"))
self.refill_btn.setText(_translate("MainWindow", "Befüllen"))
self.send_btn.setText(_translate("MainWindow", "Senden"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.multi_config_tab), _translate("MainWindow", "MultiConfig"))
self.fill_list_btn.setText(_translate("MainWindow", "fill list"))
self.listWidget.setSortingEnabled(False)
self.tabWidget.setTabText(self.tabWidget.indexOf(self.id_2_ip_tab), _translate("MainWindow", "Id 2 IP"))