亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pyqt - 在“圖標模式”中添加到 QTreeView 項目時,自定義小部件上丟失了突出顯示的選擇

Pyqt - 在“圖標模式”中添加到 QTreeView 項目時,自定義小部件上丟失了突出顯示的選擇

胡子哥哥 2022-09-27 16:18:24
我正在嘗試創建自定義小部件列表,用戶單擊它們以打開圖片/電影。我一切正常,但我失去了通常隨項目一起出現的選擇突出顯示。我知道它不在那里,因為我使用的是自定義小部件。如何在小部件上獲得選擇突出顯示?我希望該項目顯示一層透明的藍色。奇怪的是,當我將視圖模式更改為列表模式時,您可以看到藍色選擇。我已經在示例代碼中注釋掉了它。他是一個條紋背的例子,以及條紋背,因為我無論如何都能得到它。切換列表視圖并選擇一個項目以查看不同的行為。import sysfrom datetime import datetimefrom PyQt5 import QtWidgetsfrom PyQt5 import QtCorefrom PyQt5 import QtGuiclass EntryWidget(QtWidgets.QWidget):    def __init__(self):        super(EntryWidget, self).__init__()        self.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))        # controls        self.thumbnail = QtWidgets.QLabel()        self.version = QtWidgets.QLabel()        self.date = QtWidgets.QLabel()        self.name = QtWidgets.QLabel()        self.name.setAlignment(QtCore.Qt.AlignCenter)        self.author = QtWidgets.QLabel()        self.author.setAlignment(QtCore.Qt.AlignRight)        self.dummy = QtWidgets.QLabel(" ")        # layout        main_layout = QtWidgets.QVBoxLayout()        main_layout.setContentsMargins(0, 0, 0, 0)        main_layout.setSpacing(0)        main_layout.addWidget(self.name)        main_layout.addWidget(self.thumbnail)        main_layout.addWidget(self.version)        main_layout.addWidget(self.date)        main_layout.addWidget(self.author)        main_layout.addWidget(self.dummy)        main_layout.addStretch()        self.setLayout(main_layout)    def set_size(self, w, h):        self.thumbnail.setFixedSize(w, h)    def set_version(self, name):        self.version.setText(" Version:" + str(name))    def set_date(self, name):        date_string = " Date: {0}/{1}/{2}\n Time: {3}:{4}:{5}".format(            str(name.day).zfill(2),            str(name.month).zfill(2),            name.year,            name.hour,            name.minute,            name.second)        self.date.setText(date_string)    def set_name(self, name):        self.name.setText(name)    def set_author(self, name):        self.author.setText(name + " ")
查看完整描述

1 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

好吧,我已經找到了一種行之有效的方法。我在QListWidgetItem中添加了一些空白文本,并使字體變得非常大。這帶回了項目的突出顯示。


media_item.setText("  ") # set the item with a  dummy string

media_item.setFont(QFont('Verdana', 180)) # make the font big so it covers the whole widget

經過一些研究,我發現使用QListView和Q代表是做到這一點的方法。我找不到使用PyQt5的好例子/教程,所以我現在只使用它。


這是代碼


from PyQt5.QtCore    import *

from PyQt5.QtGui     import *

from PyQt5.QtWidgets import *


from sys      import exit     as sysExit

from datetime import datetime as dtDateTime


class EntryWidget(QWidget):

    def __init__(self):

        QWidget.__init__(self)


        self.setCursor(QCursor(Qt.PointingHandCursor))

        self.setFocusPolicy(Qt.StrongFocus)  # Sets the Highlight when it has focus


      # Controls

        self.thumbnail = QLabel()

        self.version = QLabel()

        self.date = QLabel()

        self.name = QLabel()

        self.name.setAlignment(Qt.AlignCenter)

        self.author = QLabel()

        self.author.setAlignment(Qt.AlignRight)

        self.dummy = QLabel(" ")


      # Layout Container

        VBox = QVBoxLayout()

        VBox.setContentsMargins(0, 0, 0, 0)

        VBox.setSpacing(0)

        VBox.addWidget(self.name)

        VBox.addWidget(self.thumbnail)

        VBox.addWidget(self.version)

        VBox.addWidget(self.date)

        VBox.addWidget(self.author)

        VBox.addWidget(self.dummy)

        VBox.addStretch()


        self.setLayout(VBox)


    def set_size(self, w, h):

        self.thumbnail.setFixedSize(w, h)


    def set_version(self, name):

        self.version.setText(" Version:" + str(name))


    def set_date(self, name):

        date_string = " Date: {0}/{1}/{2}\n Time: {3}:{4}:{5}".format(

            str(name.day).zfill(2),

            str(name.month).zfill(2),

            name.year,

            name.hour,

            name.minute,

            name.second)

        self.date.setText(date_string)


    def set_name(self, name):

        self.name.setText(name)


    def set_author(self, name):

        self.author.setText(name + " ")


class QuickExample(QDialog):

    def __init__(self):

        QDialog.__init__(self)

        self.resize(500, 500)


        media_list = QListWidget(self)


        # switch the views and select an item

        media_list.setViewMode(QListWidget.IconMode)


        media_list.setResizeMode(QListWidget.Adjust)

        media_list.setMovement(QListWidget.Static)

        media_list.setSpacing(5)


        # dummy media, usually sourced from database

        media = [

            {"version": 1, "date": dtDateTime.now(), "name": "Entry 01", "author": "Bob"},

            {"version": 2, "date": dtDateTime.now(), "name": "Entry 02", "author": "John"}

        ]


        for i in media:

            # Create media Entry

            entry = EntryWidget()

            entry.set_version(i["version"])

            entry.set_date(i["date"])

            entry.set_size(128, 72)

            entry.set_name(i["name"])

            entry.set_author(i["author"])


            # Create QListWidgetItem

            media_item = QListWidgetItem(media_list)


            ###########

            # the fix #

            ###########


            media_item.setText("  ") # set the item with a dummy string

            media_item.setFont(QFont('Verdana', 180)) # make the font big so it covers the whole widget


            # Set size hint

            media_item.setSizeHint(entry.sizeHint())


            # Add QListWidgetItem into QListWidget

            media_list.addItem(media_item)

            media_list.setItemWidget(media_item, entry)


        VBox = QVBoxLayout()

        VBox.addWidget(media_list)


        self.setLayout(VBox)



if __name__ == "__main__":

    MainEventHandler = QApplication([])

    MainApplication = QuickExample()

    MainApplication.show()

    sysExit(MainEventHandler.exec_())



查看完整回答
反對 回復 2022-09-27
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號