2017-10-10 6 views
0

xmlを比較する小さなアプリケーションを作成しようとしています。しかし、私はUIをするのに苦労しています。 QFileDialogをトリガーするボタンがあります。私は文字列の入力を受け取り、コンボボックスに入力します。残念ながら、コンボボックスは空のままです。私はそれをハードコードするときに動作するようです。しかし、私はそれを動的に行うアプリケーションを得ることができません。私が紛失しているものはありますか?ここで は、comboBox Qtを​​動的に生成します

はコードです:

import sys 
from qtpy import QtCore, QtWidgets, uic 
from qtpy.QtWidgets import QMainWindow, QApplication, QFileDialog 
from qtpy.QtCore import QObject 

class CompareSiteAndRepoWindow(QMainWindow): 

    def __init__(self): 
     super(CompareSiteAndRepoWindow,self).__init__() 
     uic.loadUi('CompareSiteAndRepo.ui',self) 
     self.BrowseLRPath.clicked.connect(self.browseFile) 
     self.buttonBox.rejected.connect(self.reject) 

     self.show() 

    def reject(self): 
     self.close() 

    def browseFile(self): 

     fileDiag = QFileDialog.getOpenFileName(self, 'Open file', 
    'c:\\',"xml/html (*.xml *.html)") 

     if(not fileDiag[0]): 
      print(fileDiag[0]) 
      self.LRPathComboBox.addItem(fileDiag[0],0) 



if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    window = CompareSiteAndRepoWindow() 

    sys.exit(app.exec()) 

CompareSiteAndRepo.uiファイル

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>CompareLabToSiteDLG</class> 
<widget class="QMainWindow" name="CompareLabToSiteDLG"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>316</width> 
    <height>262</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>MainWindow</string> 
    </property> 
    <widget class="QWidget" name="centralwidget"> 
    <layout class="QGridLayout" name="gridLayout"> 
    <item row="0" column="0"> 
    <layout class="QVBoxLayout" name="verticalLayout"> 
     <item> 
     <widget class="QLabel" name="LRLabel"> 
     <property name="text"> 
     <string>Load Report</string> 
     </property> 
     </widget> 
     </item> 
     <item> 
     <widget class="QSplitter" name="splitter"> 
     <property name="orientation"> 
     <enum>Qt::Horizontal</enum> 
     </property> 
     <widget class="QComboBox" name="LRPathComboBox"/> 
     <widget class="QPushButton" name="BrowseLRPath"> 
     <property name="text"> 
      <string>Browse</string> 
     </property> 
     </widget> 
     </widget> 
     </item> 
     <item> 
     <widget class="QLabel" name="LP2Label"> 
     <property name="text"> 
     <string>LaunchPadData repo layout</string> 
     </property> 
     </widget> 
     </item> 
     <item> 
     <widget class="QSplitter" name="splitter_2"> 
     <property name="orientation"> 
     <enum>Qt::Horizontal</enum> 
     </property> 
     <widget class="QComboBox" name="LP2RepoPath"/> 
     <widget class="QPushButton" name="BrowseLP2RepoPath"> 
     <property name="text"> 
      <string>Browse</string> 
     </property> 
     </widget> 
     </widget> 
     </item> 
     <item> 
     <widget class="QDialogButtonBox" name="buttonBox"> 
     <property name="standardButtons"> 
     <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> 
     </property> 
     </widget> 
     </item> 
    </layout> 
    </item> 
    </layout> 
    </widget> 
    <widget class="QMenuBar" name="menubar"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>316</width> 
    <height>26</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QStatusBar" name="statusbar"/> 
</widget> 
<resources/> 
<connections/> 
</ui> 

答えて

0

問題は、fileDialog[0]は、我々はそれを評価する場合、ブールは任意のためにtrueを返しますように、そのテキストがあるの文if (not fileDiag[0]):ですテキストが空であることを除いて、あなたが拒否した場合は、テキストが空でない場合はFalseになり、そうであればTrueが表示されます。これはあなたが望むものと逆です。

fileDiag[0] not fileDiag[0] 
+--------------+--------------+ 
""    True 
"some text"  False 

一つの解決策はないのを抑制することである。

if fileDiag[0]: 
    [...] 

しかし、別の解決策は、私は以下を示し、テキストが空でない場合に比較することです:

def browseFile(self): 
    filename, _ = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\',"xml/html (*.xml *.html)") 
    if filename != "": 
     self.LRPathComboBox.addItem(filename, 0) 
関連する問題