2017-10-04 11 views
0

ボタンをクリックすることで、lineeditに入力された複数の値をコンボボックスに追加したい(一度に1つの値)。私のサンプルコードは以下の通りです:lineeditに値を入力し、ボタンをクリックしてcomboBoxに値を追加しますか? 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() 

誰もがそれを行う方法を知っている場合は、plsは私に知らせてください。感謝!!

+0

コンボボックスを編集可能にした方がずっと簡単です。その後、ライン編集やボタンは必要ありません。ユーザーは、コンボボックスエディタでテキストを入力し、Enterキーを押して追加することができます。 – 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) 
を繰り返しません

変数は作成されたメソッドのスコープ内でしかアクセスできないため、ウィジェットのみの変数を作成するのは適切ではありませんが、クラスの任意のメソッドでアクセス可能なのでクラスの属性になります。このために私たちは自己を置くだけでよい。

+0

ありがとう!コンボボックスに何も表示されないようにする方法はありますか?今では、複数の値があっても追加する最初の値を表示しています...私が考えることができるのは 'self.combobox1.addItem(" ")'を使って空のアイテムを作ることです。そうする方法は? – ryan9025

+0

私はあなたを理解していないので、何も表示しないようにするには、QComboBoxの目的はオプションを選択することです。あなたがコメントするのは唯一のフォームなので、強制されますが、あなたの要件もあります。 – eyllanesc

+0

@ ryan9025。 'combo.setCurrentIndex(-1)'を使うことができます。 – ekhumoro

関連する問題