简体   繁体   中英

How do I open sub window after I click on button on main screen in PyQt4

HI I am trying to make a simple converter. I have used PyQt4 designed to make the Gui I want to know how launch a new window after I click on the individual button.

This is the interface I have created using PyQt4 Designer. Here is the Image link :

一个

and I want to launch this windows when I click on currency button. Here is the Image Link:

b

Here is my code for 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()

and code for 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)

How can I open new window after I click on currency button (object name for currency button is "currency_bt") and do I have to write the code for currency in same window or I have to write in new window. How do I do it.

I am new to Python Gui programming.

Each GUI form that you create in Qt Designer needs to be converted into a python module using pyuic. So, to start with, you need to do the same for currency.ui that you did for window_main .

Now you can import your currency window class into mainscreen.py , and connect a button to handler so you can display it.

The code would look something like this:

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()

After looking at this example code, it will probably occur to you that you are going to end up importing a lot of modules, and have a lot of boiler-plate code to write for each one of them (which is not much fun).

So I would advise you to consider changing your GUI design, so that you have one main window containing a tabwidget, and then have a separate tab for each of your converters. This will not only make your application much easier to write, but it should also make it a lot nicer to use.

I'm making my bachelor thesis in PyQt4. First I also wanted to use the designer (generating code is nice), but afterall I was not using it during my work. Maybe it's a matter of taste. But for your question (I did this without the QtDesigner):

Let's say we have a main window class:

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_())

There are some good tutorials ( http://zetcode.com/gui/pyqt4/ helped me getting started).

Make two programs: and , then in main_win.py put this lines: ,然后在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") 

Ready, just connect the push button to function openewin!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM