我有一個QListWidget包含一個專案,我希望專案的文本部分粗體,所以我QItemWidget為它創建了一個。我在其中使用aQLabel來顯示部分粗體文本,代碼如下:
專案小部件.py
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QHBoxLayout, QLayout, QLabel
class ItemWidget(QtWidgets.QWidget):
def __init__(self):
super(ItemWidget, self).__init__()
self.setLayout(self.__get_layout())
def __get_layout(self) -> QHBoxLayout:
label = QLabel("<b>bold</b> texts")
widget_layout = QHBoxLayout()
widget_layout.addWidget(label)
widget_layout.setSizeConstraint(QLayout.SetFixedSize)
widget_layout.setContentsMargins(0, 0, 0, 0)
return widget_layout
主檔案
from PyQt5.QtWidgets import QListWidget, QWidget, QVBoxLayout, QApplication, QListWidgetItem
from ItemWidget import ItemWidget
class Window(QWidget):
def __init__(self):
super().__init__()
list_widget = QListWidget()
list_widget.itemClicked.connect(self.on_item_clicked)
vbox = QVBoxLayout()
vbox.addWidget(list_widget)
item_widget = ItemWidget()
item = QListWidgetItem()
list_widget.addItem(item)
list_widget.setItemWidget(item, item_widget)
self.setLayout(vbox)
def on_item_clicked(self):
print("Item clicked")
app = QApplication([])
window = Window()
window.show()
app.exec_()
這是用戶界面:

當我單擊串列中的專案時,Item clicked應該會列印到輸出控制臺。但問題是,它只有在我不點擊文本時才有效:

QLabel如果我給in一個純文本,問題似乎消失了ItemWidget,例如label = QLabel("text"),為什么?這里有什么問題?
uj5u.com熱心網友回復:
設定富文本內容會導致滑鼠按鈕釋放事件總是被接受(我想這是由于富文本可以包含鏈接的事實)。
視圖必須接收滑鼠釋放事件才能呼叫它mouseReleaseEvent()并最終發出clicked信號,但由于該事件已被標簽接受,因此不會發生這種情況。
如果您不需要該文本中的鏈接,只需重置文本互動標志:
label.setTextInteractionFlags(Qt.NoTextInteraction)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/469019.html
上一篇:LINUX系統虛擬機環境的安裝
