2017-10-04 110 views
0

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

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

如果有人知道如何做到这一点,请让我知道。感谢!

+0

如果你可以编辑组合框,它会简单得多。那么你不需要行编辑或按钮。用户只需在组合框编辑器中键入文本,然后按回车即可添加它。 – ekhumoro

+0

@ekhumoro你会分享如何使它可食用?感谢! – ryan9025

+0

您可以使用[QComboBox.setEditable](https://doc.qt.io/qt-4.8/qcombobox.html#editable-prop)。所以你需要做的就是在你的例子中添加'combo.setEditable(True)'。 – ekhumoro

回答

1

解决方案非常简单,首先应该分析的是在发生点击信号的情况下,在发生点击信号的情况下执行操作,以便插槽连接并在其中管理逻辑。要获取文本,使用的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) 

变量只能在创建的方法范围内访问,因此不适合仅使用Widget变量,但由于类的任何方法都可访问该类的属性,所以不适合使用这些变量。为此,我们只能把自己。

+0

谢谢!有什么办法可以让组合框在GUI上不显示任何东西(空)?现在它只显示我添加的第一个值,即使其中有多个值...我可以想到的一种方式是使用'self.combobox1.addItem(“”)'来创建一个空项目。但是有没有更好的方法这样做的方式? – ryan9025

+0

我不理解你,所以你不需要显示任何东西,QComboBox的目的是选择一个选项。正如你所评论的是唯一的形式,它是被迫的,但你的要求也是。 – eyllanesc

+0

@ ryan9025。你可以使用'combo.setCurrentIndex(-1)'。 – ekhumoro

相关问题