PyQt5-为弹出窗口添加自定义QComboBox。

问题描述 投票:0回答:1

我创建了一个自定义类,继承自 QCombobox() 作为我的主应用程序的一部分,工作正常。现在,我想在点击了 ChangeAttributesButton() (QPushButton()). 下面是相关的代码片段。

import sys, os, glob
from PyQt5.QtWidgets import (QApplication, QLabel, QMdiSubWindow, 
    QMainWindow, QAction, QPushButton, QFileDialog, QComboBox)
from PyQt5.QtCore import Qt, pyqtSignal, QObject
from qgis.core import *
from qgis.gui import *

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        # Save reference to the QGIS interface
        self.iface = iface
        self.canvas = self.iface.mapCanvas()
        self.project = QgsProject.instance()
        self.setWindowTitle('Marker')

        #add toolbar
        self.toolbar = QToolBar("Grade Marker Toolbar")
        self.toolbar.setIconSize(QSize(20,20))
        self.addToolBar(self.toolbar)

        self.SelectCategoryComboBox = SelectCategoryComboBox()
        self.toolbar.addWidget(self.SelectCategoryComboBox)
        self.toolbar.addSeparator()  

        self.ChangeAttributesButton = ChangeAttributesButton(self.canvas)
        self.ChangeAttributesButton.setIcon(QIcon(r'abc.png'))
        self.ChangeAttributesButton.setIconText('Change Grade')
        self.toolbar.addWidget(self.ChangeAttributesButton)
        self.toolbar.addSeparator()
        self.ChangeAttributesButton.clicked.connect(self.ChangeAttributesButton.on_click)

class SelectCategoryComboBox(QComboBox):
    def __init__(self):
        super(SelectCategoryComboBox, self).__init__()
        self.setEnabled(True)
        categories = ['Select Category',"A+","A", "B", "C", "F" ]
        for cat in categories:
            self.addItem(cat)

引起问题的地方在这里。

class ChangeAttributesButton(QPushButton):
    def __init__(self,canvas):
        super(ChangeAttributesButton, self).__init__()
        self.setEnabled(True)
        self.canvas = canvas

    def on_click(self,state):
        window = ChangeAttributesWindow()

class ChangeAttributesWindow(QWidget):
    def __init__(self):
        super(ChangeAttributesWindow, self).__init__()
        self.title = 'Change Feature Attributes'
        category_box = SelectCategoryComboBox()
        self.addWidget(category_box)
        self.initUI()

    def initUI(self):
        self.show()

app = QApplication(sys.argv)
window = MainWindow()
window.show()

我得到了

AttributeError: 'ChangeAttributesWindow' object has no attribute 'addWidget'`. I have tried changing the parent class of `ChangeAttributesWindow()

QMdiSubWindow()

QMainWindow() 但我还是得到一个同样的错误。

我如何添加一个 SelectCategoryComboBox() 到子窗口或弹出窗口?

这是完整的错误。

enter image description here

python-3.x pyqt pyqt5
1个回答
1
投票

一个QWidget没有任何叫做addWidget()的方法,所以会抛出这个错误。

如果你想添加一个小组件到一个窗口,你可以添加它。

  • 将小组件的父节点设置为窗口。
class ChangeAttributesWindow(QWidget):
    def __init__(self):
        super(ChangeAttributesWindow, self).__init__()
        self.title = 'Change Feature Attributes'
        category_box = SelectCategoryComboBox()
        category_box.setParent(self)
        category_box.move(30, 30)
        self.initUI()
  • 使用在窗口中建立的布局。
class ChangeAttributesWindow(QWidget):
    def __init__(self):
        super(ChangeAttributesWindow, self).__init__()
        self.title = 'Change Feature Attributes'
        category_box = SelectCategoryComboBox()
        lay = QVBoxLayout(self)
        lay.addWidget(category_box)
        self.initUI()
© www.soinside.com 2019 - 2024. All rights reserved.