【问题标题】:Type values in lineedit and then add it to a comboBox by clicking a button? PyQt4在 lineedit 中键入值,然后通过单击按钮将其添加到组合框? PyQt4
【发布时间】:2018-03-16 07:06:30
【问题描述】:

我想通过单击按钮将在 lineedit 中键入的多个值添加到组合框中(一次一个值)。我的示例代码如下:

import os, sys

import PyQt4
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Example(QWidget):
    def __init__(self, parent = None):
        super().__init__()

        self.grid = QGridLayout()
        self.setLayout(self.grid)
        btn = QPushButton()
        le = QLineEdit()
        combo = QComboBox()

        self.grid.addWidget(btn, 0, 0)
        self.grid.addWidget(le, 0 , 1)
        self.grid.addWidget(combo, 0, 2)


        self.show()

def main():
    app = QApplication(sys.argv)
    main = Example()
    main.show()
    sys.exit(app.exec_())

main()

如果有人知道怎么做,请告诉我。赞赏!!

【问题讨论】:

  • 如果您将组合框设为可编辑,会简单很多。那么你就不需要行编辑或按钮了。用户只需在组合框编辑器中键入文本,然后按回车键即可添加。
  • @ekhumoro 你能分享一下如何让它可以食用吗?赞赏!!
  • 您可以使用QComboBox.setEditable。所以你需要做的就是在你的例子中添加combo.setEditable(True)

标签: python button pyqt qcombobox qlineedit


【解决方案1】:

解决方案很简单,您首先应该分析的是在哪个事件之前完成了操作,在您的情况下,当发出 clicked 信号时,连接了一个插槽并在其中管理逻辑。要获取文本,使用QLineEdittext()方法,并使用addItem()方法将其添加到QComboBox中,我添加了一个小逻辑来验证并且不能添加非空文本也不能重复项目

class Example(QWidget):
    def __init__(self, parent = None):
        super().__init__()

        self.grid = QGridLayout()
        self.setLayout(self.grid)
        self.btn = QPushButton()
        self.le = QLineEdit()
        self.combo = QComboBox()

        self.grid.addWidget(self.btn, 0, 0)
        self.grid.addWidget(self.le, 0 , 1)
        self.grid.addWidget(self.combo, 0, 2)

        self.btn.clicked.connect(self.onClicked)

    def onClicked(self):
        text = self.le.text()
        # the text is not empty
        if text != "":
            # get items of combobox
            items = [self.combo.itemText(i) for i in range(self.combo.count())] 
            # Add if there is no such item
            if text not in items: 
                self.combo.addItem(text)

变量只能在创建的方法的范围内访问,因此不适合将小部件设置为仅变量,而是类的属性,因为它们可以在类的任何方法中访问。为此,我们只能放 self。

【讨论】:

  • 谢谢!有什么方法可以让组合框在 GUI 上不显示任何内容(null)?现在它只显示我添加的第一个值,即使其中有多个值...我能想到的一种方法是使用 self.combobox1.addItem("") 来制作一个空项目。但是有更好的方法吗?
  • 我不懂你,所以你不想显示任何东西,QComboBox的目的是选择一个选项。由于您的评论是唯一的形式,因此它是强制的,但您的要求也是。
  • @ryan9025。你可以使用combo.setCurrentIndex(-1)
猜你喜欢
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多