动态填充comboBox Qt

时间:2017-10-10 14:57:32

标签: python qt qcombobox qtpy

我正在尝试编写一个比较xml的小应用程序。但是我正在努力做UI。我有一个触发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 个答案:

答案 0 :(得分:0)

问题是语句WordWrapif (not fileDiag[0]):是一个文本,如果我们将它评估为boolean将为任何文本返回True,除非它是空的,如果你否认它将是False如果文本不是空的,如果是空的,则为True,这与你想要的相反:

fileDialog[0]

一种解决方案是压制not:

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

但另一个解决方案是比较文本是否为空,如下所示:

if fileDiag[0]:
    [...]