【问题标题】:Python PyQt Change layout of comboboxPython PyQt 改变组合框的布局
【发布时间】:2019-05-05 13:32:27
【问题描述】:

有没有办法(或者我可以使用不同的小部件(我找不到任何小部件)让我的组合框看起来像图片中的组合框?

图片显示了我想用字体放置的内容。我希望这些选项成为我的字体列表。

我想查看所有选项(如果可以滚动的选项太多)并选择一个。

到目前为止,这是我的代码:

from PyQt5 import QtCore, QtWidgets
import sys
from PyQt5 import QtGui, QtWidgets, QtPrintSupport


class Thired(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Thired, self).__init__(parent)

        self.bb = QtWidgets.QComboBox(self)
        self.bb.setGeometry(QtCore.QRect(212, 50, 400, 25))
        self.bb.setEditable(True)

        bpas = ['a','b','c']

        self.bb.addItem("")
        self.bb.setItemText(0, "")
        for bpa in bpas:
            self.bb.addItem(bpa)

        self.bb.move(50, 200)
        self.bb.activated[str].connect(self.style_choice)

    def font_choice(self):
        font, valid = QtWidgets.QFontDialog.getFont()
        if valid:
            self.styleChoice.setFont(font)

    def style_choice(self, text):
        self.styleChoice.setText(text)
        QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create(text))

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    gui = Thired()
    gui.show()
    app.exec_()

编辑:

我希望当窗口打开时,我的所有选项总是会显示出来。这样我就不必按下拉箭头。换句话说:如果窗口正在打开,有一个bpas 的列表,我希望能够从列表中选择一个 bpa/选项并发送一个我选择这个 bpa 的信号。

再解释一下(代码中没有显示):bpas = ['a','b','c'] 是项目,我希望用户选择其中一个,选择后程序将加载其连接的数据库。使用下拉它可以工作,但我不喜欢 dorpdown 看起来有很多选项的方式:)

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 qcombobox


    【解决方案1】:

    您可以将 QListWidget 与 QLineEdit 一起使用:

    from PyQt5 import QtCore, QtWidgets
    import string
    
    class Thired(QtWidgets.QDialog):
        def __init__(self, parent=None):
            super(Thired, self).__init__(parent)
    
            self.line_edit = QtWidgets.QLineEdit()
            self.list_widget = QtWidgets.QListWidget()
            options = list(string.ascii_letters)
            self.list_widget.addItems(options)
            self.list_widget.itemClicked.connect(self.on_itemClicked)
    
            lay = QtWidgets.QVBoxLayout(self)
            lay.addWidget(self.line_edit)
            lay.addWidget(self.list_widget)
            self.resize(640, 480)
    
        @QtCore.pyqtSlot(QtWidgets.QListWidgetItem)
        def on_itemClicked(self, item):
            self.line_edit.setText(item.text())
    
    if __name__ == '__main__':
        import sys
        app = QtWidgets.QApplication(sys.argv)
        gui = Thired()
        gui.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 不幸的是,这不是我想要的。但是已经谢谢你了。我试图多解释一下自己并编辑了这个问题。如果我仍然没有说清楚,请告诉我,我觉得很难解释。
    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2010-11-28
    • 2019-01-02
    相关资源
    最近更新 更多