【问题标题】:How to connect PYQT Qwizard next button to a method如何将 PYQT Qwizard 下一个按钮连接到方法
【发布时间】:2020-08-10 17:07:01
【问题描述】:

我正在尝试构建一个应用程序并拥有一个向导。我已经用 pyqt5 创建了 GUI,并使用了 Qwizard 库作为向导。我试图将 qwizard 页面中的方法连接到 Next 按钮,但似乎找不到方法。

我希望连接类 page2 中称为 Next button 的方法,我希望在单击此页面上的下一个按钮时触发一些东西。

我的代码:

import sys
from PyQt5.QtWidgets import QWidget, QApplication, QToolBar, QAction, QVBoxLayout, QHBoxLayout, QGridLayout, QLabel,\
    QGroupBox, QWizard, QWizardPage, QPushButton, QLineEdit, QComboBox
import PyQt5.QtGui as QtGui
from PyQt5.QtGui import QFont


class App(QWidget):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.left = 200
        self.top = 200
        self.width = 640
        self.height = 480
        self.title = "App"
        self.setWindowTitle(self.title)
        self.setWindowIcon(QtGui.QIcon("logo.ico"))
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.toolbar = QToolBar("")

        ########################## ToolbarButtons ###################################
        self.button_add = QAction("Add", self)
        self.button_add.setIcon(QtGui.QIcon("add.ico"))
        self.button_add.setStatusTip("Add stuff")
        self.toolbar.addAction(self.button_add)
        self.button_browse = QAction("Open", self)
        self.button_browse.setIcon(QtGui.QIcon("folder.ico"))
        self.button_browse.setStatusTip("Open stuff")
        self.toolbar.addAction(self.button_browse)
        self.button_save = QAction("Save", self)
        self.button_save.setIcon(QtGui.QIcon("save.ico"))
        self.button_save.setStatusTip("Save stuff")
        self.toolbar.addAction(self.button_save)
        self.button_settings = QAction("Settings", self)
        self.button_settings.setIcon(QtGui.QIcon("settings.ico"))
        self.button_settings.setStatusTip("Set stuff")
        self.toolbar.addAction(self.button_settings)


        self.window_layout = QGridLayout()
        self.setLayout(self.window_layout)
        self.wizard = WizardInit()
        print("Test")
        self.wizard.setWizardStyle(QWizard.ModernStyle)
        self.show()
        self.wizard.show()


class WizardInit(QWizard):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Wizard")
        self.resize(500, 500)
        self.addPage(Page1())
        self.addPage(Page2())
        self.addPage(Page3())


class Page1(QWizardPage):
    def __init__(self):
        super().__init__()


class Page2(QWizardPage):
    def __init__(self):
        super().__init__()

    def next_btn(self):
        print("next")


class Page3(QWizardPage):
    def __init__(self):
        super().__init__()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

【问题讨论】:

  • mmm,既然按“next”按钮会改变页面,所以你想在页面改变之前或之后运行“next_btn”,“next_btn”是否需要属于第二页?
  • 我希望它执行一个将在第 3 页进行的过程。
  • 嗯,解释清楚,我听不懂。您可以指向具体的示例。
  • 好的,所以我想当我按下下一步按钮时,它会打开一个浏览器(我用 webdriver 和今天的按钮来做)。并在浏览器打开时继续到下一页。
  • 那么在“Page2”中实现“next_btn”有必要吗?如果您想启动浏览器,那么为什么不在第三页打开时启动呢?根据你所指出的,我认为你有一个XY problem

标签: python pyqt qwizard qwizardpage


【解决方案1】:

您可以将 completeChanged() 信号连接到您的方法。那应该做的工作。请注意,在其他情况下也会发出 completeChanged()(例如按下后退按钮时)。因此,请确保您在代码中测试正确的按钮。

尝试在代码中进行以下更改以获得简单版本,您稍后需要使 next_btn 更复杂以确保单击右键:

class Page2(QWizardPage):
    def __init__(self):
        super().__init__()
        self.completeChanged.connect(self.next_btn)

    def next_btn(self):
        print("next")

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2016-01-11
    • 2018-12-09
    • 2013-05-10
    • 2012-06-04
    相关资源
    最近更新 更多