Динамически заполнять comboBox Qt

Я пытаюсь написать небольшое приложение, которое сравнивает XML. Но верно, мне трудно делать пользовательский интерфейс. У меня есть кнопка, которая вызывает QFileDialog. Я беру строку ввода и заполняю комбинированный список. К сожалению, поле со списком остается пустым. Кажется, работает, когда я это жестко закодировал. Но я не могу заставить приложение делать это динамически. Есть что-то, чего мне не хватает?

Вот код:

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>

1 ответ

Решение

Проблема в утверждении if (not fileDiag[0]):, fileDialog[0] это текст, который, если мы оценим его как логическое, вернет True для любого текста, кроме того, что он пустой, и если вы откажетесь, он будет 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)
Другие вопросы по тегам