Измените значения combobox в файле Qt .ui с помощью PySide2 - PullRequest
0 голосов
/ 07 августа 2020

Я использую PySide2 для загрузки файла .ui Qt Designer. У меня есть поле со списком под названием categoryBox, которое является дочерним элементом MainWindow.centralwidget

. Я хочу использовать Python для замены его содержимого списком без изменения самого файла .ui. Однако я понятия не имею, как найти поле со списком, и это важно, когда дело доходит до замены.

Короче говоря, у меня есть поле со списком. Не знаю, где его найти, но я знаю, где он.

Соответствующие XML данные из файла .ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>799</width>
    <height>513</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>BlueCalculator</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QLabel" name="titleLabel">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>10</y>
      <width>231</width>
      <height>51</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>26</pointsize>
     </font>
    </property>
    <property name="text">
     <string>BlueCalculator</string>
    </property>
   </widget>
   <widget class="QComboBox" name="categoryBox">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>80</y>
      <width>221</width>
      <height>21</height>
     </rect>
    </property>
   </widget>

Код, открывающий. ui файл:

import sys, os
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication
from PySide2.QtCore import QFile, QIODevice
import os
rootdir = '.\\functions'


if __name__ == "__main__":
app = QApplication(sys.argv)

ui_file_name = "main.ui"
ui_file = QFile(ui_file_name)
if not ui_file.open(QIODevice.ReadOnly):
    print("Cannot open {}: {}".format(ui_file_name, ui_file.errorString()))
    sys.exit(-1)
loader = QUiLoader()
window = loader.load(ui_file)
ui_file.close()
if not window:
    print(loader.errorString())
    sys.exit(-1)
window.show()

sys.exit(app.exec_())

1 Ответ

1 голос
/ 07 августа 2020

При использовании QUiLoader все объекты назначаются как атрибут окна с помощью objectName, в вашем случае вы должны использовать:

window.categoryBox.addItems(["Foo", "Bar"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...