0

我正在使用 PyQGIS 和 PyQt5 为 QGIS 构建一个插件。我想使用多个窗口。单击按钮后,应打开一个新窗口。理想情况下,它应该与窗口 1 重叠。在窗口 2 中编辑后,它应该回到窗口 1。

我之前的代码是这样的:

class MainWindow(QDialog):
    def __init__(self):
        super(MainWindow, self).__init__()
        loadUi(r"test1.ui", self)
        self.button.clicked.connect(self.gotoScreen2)

    def gotoScreen2(self):
        screen2=Screen2()
        widget.addWidget(screen2)
        widget.setCurrentIndex(widget.currentIndex()+1)
        
class Screen2(QDialog):
    def __init__(self):
        super(Screen2,self).__init__()
        loadUi(r"test2.ui", self)
        self.pushButton.clicked.connect(self.gotoScreen1)
        
    def gotoScreen1(self):
        mainwindow = MainWindow()
        widget.addWidget(mainwindow)
        widget.setCurrentIndex(widget.currentIndex()+1)
        
#main
app = QApplication(sys.argv)
widget = QtWidgets.QStackedWidget() 
mainwindow = MainWindow()
widget.addWidget(mainwindow)
widget.show()

在此基础上,我希望插件窗口停靠在程序的右侧。我知道QDockWidget类和addDockWidget (QtCore.Qt.RightDockWidgetArea,...)是可能的。但是如何将这些类内置到我的脚本中?

4

1 回答 1

0

这是我的解决方案(现在有三个直接相互通信的 UI(窗口)。)它在 QGIS 中运行良好。

class MainWindow(QDialog):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.gui = loadUi(r"test1.ui", self)
        self.button.clicked.connect(self.gotoScreen2)
        self.btn_adding.clicked.connect(self.adding)

    def gotoScreen2(self):
        screen2=Screen2()
        widget.setWidget(screen2)
        
class Screen2(QDialog):
    def __init__(self):
        super(Screen2,self).__init__()
        loadUi(r"test2.ui", self)
        self.pushButton.clicked.connect(self.gotoScreen1)
        self.pushButton_2.clicked.connect(self.gotoScreen3)
        
    def gotoScreen1(self):
        mainwindow = MainWindow()
        widget.setWidget(mainwindow)
        
    def gotoScreen3(self):
        screen3=Screen3()
        widget.setWidget(screen3)
        
class Screen3(QDialog):
    def __init__(self):
        super(Screen3,self).__init__()
        loadUi(r"test3.ui", self)
        self.pushButton.clicked.connect(self.gotoScreen2)
        
    def gotoScreen2(self):
        screen2=Screen2()
        widget.setWidget(screen2)


widget = QtWidgets.QDockWidget("test")
mainwindow = MainWindow()
widget.setWidget(mainwindow)
#dock on the right side of the screen
iface.addDockWidget(QtCore.Qt.RightDockWidgetArea, widget)
widget.show()
于 2021-06-25T08:37:21.327 回答