Python PyQt更改组合框的布局

2024-10-03 23:30:41 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法(或者可能是一个不同的小部件我可以使用(我找不到任何)使我的组合框看起来像图片中的组合框?在

这张图显示了我要用字体写的东西。我希望选项是我的列表,而不是字体。enter image description here

我想看到所有的选项(如果有很多可以滚动)和选择一个。在

以下是我目前为止的代码:

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

编辑:

我希望当whindow打开时,我所有的选择总是被显示出来。这样我就不用按下拉框了。换言之:如果窗口正在打开,则有一个bpas列表,我希望能够从列表中选择一个bpa/选项并发送一个我选择此bpa的信号。在

再解释一下我自己(这在代码中没有显示):bpas = ['a','b','c']是项目,我希望用户选择其中一个,选择后程序将加载其连接的数据库。有了dropdown就可以了,但是我不喜欢dorpdown有很多选择的样子:)


Tags: 代码textimportself列表def选项字体
1条回答
网友
1楼 · 发布于 2024-10-03 23:30:41

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

enter image description here

相关问题 更多 >