【问题标题】:Center non-editable QComboBox Text with PyQt使用 PyQt 居中不可编辑的 QComboBox 文本
【发布时间】:2016-09-27 14:31:18
【问题描述】:

是否可以更改不可编辑的 QComboBox 的文本对齐方式?这个答案通过使 QComboBox 可编辑来实现这一点

How to center text in QComboBox?

但是,我不希望这样,因为通过该更改,触发列表的 ComboBox 的可点击部分现在只是右侧的箭头,而在整个区域可点击并触发下拉菜单之前。

【问题讨论】:

    标签: python css pyqt


    【解决方案1】:

    部分答案已在链接问题How to center text in QComboBox? 中给出 剩下的就是使只读对象可点击。这可以按照here 的建议来完成。 ...给你以下代码:

    from PyQt4 import QtGui, QtCore
    
    class Window(QtGui.QWidget):
        def __init__(self):
            QtGui.QWidget.__init__(self)
            layout = QtGui.QVBoxLayout(self)
            self.combo = QtGui.QComboBox()
            self.combo.setEditable(True)
            self.ledit = self.combo.lineEdit()
            self.ledit.setAlignment(QtCore.Qt.AlignCenter)
            # as suggested in the comment to 
            # https://stackoverflow.com/questions/23770287/how-to-center-text-in-qcombobox
            self.ledit.setReadOnly(True) # 
            self.combo.addItems('One Two Three Four Five'.split())
            layout.addWidget(self.combo)
            self.clickable(self.combo).connect(self.combo.showPopup)
            self.clickable(self.ledit).connect(self.combo.showPopup)
    
        def clickable(self,widget):
            """ class taken from 
            https://wiki.python.org/moin/PyQt/Making%20non-clickable%20widgets%20clickable """
            class Filter(QtCore.QObject):
                clicked = QtCore.pyqtSignal()
                def eventFilter(self, obj, event):
                    if obj == widget:
                        if event.type() == QtCore.QEvent.MouseButtonRelease:
                            if obj.rect().contains(event.pos()):
                                self.clicked.emit()
                                # The developer can opt for .emit(obj) to get the object within the slot.
                                return True
                    return False
            filter = Filter(widget)
            widget.installEventFilter(filter)
            return filter.clicked
    
    if __name__ == '__main__':
    
        import sys
        app = QtGui.QApplication(sys.argv)
        window = Window()
        window.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 是的,确实达到了预期的结果。似乎必须有更好的方法。感谢您的回复
    猜你喜欢
    • 2017-12-15
    • 2020-08-05
    • 2013-04-11
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 2021-06-26
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多