单击PyQt4中主屏幕上的按钮后,如何打开子窗口

时间:2014-12-19 13:32:52

标签: python user-interface pyqt4

我正在尝试制作一个简单的转换器。 我用PyQt4设计制作了Gui 我想知道在点击单个按钮后如何启动新窗口。

这是我使用PyQt4 Designer创建的界面。 这是图片链接:

a

我想在点击货币按钮时启动此窗口。 这是图片链接:

b

以下是 main.py

的代码
from PyQt4 import QtGui
from main_screen import mainscreen

def main():
    import sys
    qApp = QtGui.QApplication(sys.argv)
    aw = mainscreen()
    aw.show()
    sys.exit(qApp.exec_())

if __name__ == '__main__':
    main()

mainscreen.py

的代码
from PyQt4 import QtCore, QtGui
from window_main import Ui_MainWindow

class mainscreen(QtGui.QMainWindow, Ui_MainWindow):
        def __init__(self, parent=None):
                super(mainscreen,self).__init__(parent)
                self.ui = Ui_MainWindow()
                self.ui.setupUi(self)

点击货币按钮后,如何打开新窗口(货币按钮的对象名称为" currency_bt") 我是否必须在同一个窗口中编写货币代码,或者我必须在新窗口中写入。 我该怎么做。

我是Python Gui编程的新手。

3 个答案:

答案 0 :(得分:6)

您在Qt Designer中创建的每个GUI表单都需要使用pyuic转换为python模块。首先,您需要对currency.ui所做的window_main执行相同的操作。

现在您可以将货币窗口类导入mainscreen.py,并将按钮连接到处理程序,以便显示它。

代码看起来像这样:

from PyQt4 import QtCore, QtGui
from window_main import Ui_MainWindow
from currency import Ui_CurrencyWindow

class CurrencyWindow(QtGui.QMainWindow, Ui_CurrencyWindow):
    def __init__(self, parent=None):
        super(CurrencyWindow, self).__init__(parent)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setupUi(self)

class MainScreen(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainScreen, self).__init__(parent)
        self.setupUi(self)
        self.currencyButton.clicked.connect(self.handleCurrencyButton)

    def handleCurrencyButton(self):
        window = CurrencyWindow(self)
        window.show()

在查看此示例代码之后,您可能会想到最终导入很多模块,并且很多的锅炉 - 用于为每一个写入的代码(这不是很有趣)。

因此,我建议您考虑更改GUI设计,以便有一个包含tabwidget的主窗口,然后为每个转换器分别设置一个选项卡。这不仅可以使您的应用程序更多更容易编写,而且还可以使它更好用。

答案 1 :(得分:3)

我在PyQt4中完成了我的学士论文。首先,我也想使用设计器(生成代码很好),但毕竟我在工作期间没有使用它。也许这是一个品味问题。 但是对于你的问题(我没有QtDesigner这样做):

我们说我们有一个主窗口类:

import sys
from PyQt4 import QtCore, QtGui

class mainscreen(QtGui.QMainWindow):
        def __init__(self, parent=None):
            super(mainscreen,self).__init__(parent)

            self.button = QtGui.QPushButton("push")
            self.button.clicked.connect(self.pushed)

        @pyqtSlot()
        def pushed(self):
            # in this section here you can create the new window and show it


 qApp = QtGui.QApplication(sys.argv)
    aw = mainscreen()
    aw.show()
    sys.exit(qApp.exec_())

有一些很好的教程(http://zetcode.com/gui/pyqt4/帮助我入门)。

答案 2 :(得分:-2)

创建两个程序: main_win.py second_win.py ,然后在 main_win.py 中添加以下行:

from os import system as sh               //In the begin

def openewin(self):                       //In the class main_win
    sh("python second_win.py") 

准备就绪,只需将按钮连接到openewin功能!