2017-10-04 109 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

相關問題