Python PyQt 更改组合框的布局

Python PyQt Change layout of combobox

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

图片是我要放的字体。我希望选项成为我的字体列表。

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

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

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_()

编辑:

我希望窗口打开时始终显示我的所有选项。这样我就不必按下拉箭头。换句话说:如果 window 正在打开,则有一个 bpas 的列表,我希望能够从 bpa/option 的列表之一中 select 并发送一个表明我选择了这种双酚 A。

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

您可以将 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_())