how to open multiple pages in single window in pyqt? - python

I created two windows
First window
from PyQt5 import QtCore, QtGui, QtWidgets
from dial import Ui_dial
from chat import Ui_Chat
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(764, 719)
font = QtGui.QFont()
font.setKerning(False)
Form.setFont(font)
Form.setStyleSheet()
self.call_button = QtWidgets.QPushButton(Form)
self.call_button.setGeometry(QtCore.QRect(320, 500, 111, 71))
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.call_button.setFont(font)
self.call_button.setStyleSheet("")
self.call_button.setText("")
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(":/images/Images/call.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.call_button.setIcon(icon2)
self.call_button.setIconSize(QtCore.QSize(58, 58))
self.call_button.setCheckable(True)
self.call_button.setAutoExclusive(True)
self.call_button.setObjectName("call_button")
self.call_button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Space))
self.call_button.clicked.connect(self.dialwindow)
self.ilabel = QtWidgets.QLabel(Form)
self.ilabel.setGeometry(QtCore.QRect(210, 60, 331, 191))
font = QtGui.QFont()
font.setFamily("Sylfaen")
font.setPointSize(18)
self.ilabel.setFont(font)
self.ilabel.setStyleSheet("background-image: url(:/images/Images/label_back1.jpg);")
self.ilabel.setObjectName("ilabel")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
import icons_rc
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QDialog()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
Second Window
from PyQt5 import QtCore, QtGui, QtWidgets
import dial_rc
class Ui_dial(object):
def setupUi(self, dial):
dial.setObjectName("dial")
dial.resize(739, 712)
dial.setStyleSheet()
self.dialpage_label = QtWidgets.QLabel(dial)
self.dialpage_label.setGeometry(QtCore.QRect(240, 120, 301, 511))
self.dialpage_label.setObjectName("dialpage_label")
self.callend_button = QtWidgets.QPushButton(dial)
self.callend_button.setGeometry(QtCore.QRect(340, 520, 91, 71))
self.callend_button.setText("")
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/images/Images/end.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.callend_button.setIcon(icon)
self.callend_button.setIconSize(QtCore.QSize(45, 45))
self.callend_button.setObjectName("callend_button")
self.callend_button.clicked.connect(self.endcall)
def retranslateUi(self, dial):
_translate = QtCore.QCoreApplication.translate
dial.setWindowTitle(_translate("dial", "Dialog"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
dial = QtWidgets.QDialog()
ui = Ui_dial()
ui.setupUi(dial)
dial.show()
sys.exit(app.exec_())
How to show this different windows in single window?when click on button new window is open ,so i want show when i click on the button that second window open in same screen.so i need expertise on this problem

First modify your python script so that the class inherits from QtWidgets.QMainWindow
by
class Ui_Form(QtWidgets.Qdialog):
Then write an init function so that your class can be instantiated, i.e an object can be created. Once that is done, you can chuck out the QtWidgets.QDialog() object, the one that goes by the name dial in your script, being passed to your setupUI(). Then replace this object being passed with self.
Overall your code will look like this.
class Ui_dial(QtWidgets.Qdialog):
def __init__(self):
super().__init__()//inheriting from the object.
def setupUi(self, dial):
self.setObjectName("dial")
self.resize(739, 712)
self.setStyleSheet()
self.dialpage_label = QtWidgets.QLabel(dial)
self.dialpage_label.setGeometry(QtCore.QRect(240, 120, 301, 511))
self.dialpage_label.setObjectName("dialpage_label")
self.callend_button = QtWidgets.QPushButton(dial)
self.callend_button.setGeometry(QtCore.QRect(340, 520, 91, 71))
self.callend_button.setText("")
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/images/Images/end.png"),
def retranslateUi(self):
_translate = QtCore.QCoreApplication.translate
self.setWindowTitle(_translate("dial", "Dialog"))
Do the same for your other script and then make objects of these classes and call them as,
First_window = Ui_Form()
First_window.show()
Second_window = Ui_dial()
Second_window.show()
You might need to use resize() to adjust the two windows and to accommodate them according to your needs.

Related

How to make it so that my PyQt5 checkbox can be prechecked from another .py file

I'm making a GUI with PyQt5.
I'm very very new to it. I need help.
First i have a stacked widget that I can use to switch between pages.
Right now im trying to make a setings page.
Settings Page
I know that putting stacked widgets for changing like "window"/page in pyqt5 might not be the best but ignore if you want to (if its bad give me a suggestion please).
Right now I want to check if the Dark Mode checkbox is enabled.
I have a MainWindow.py and I have a gui.py which is the one that I transformed from a .ui to .py (pyuic5 cmd).
In MainWindow.py I'm handling all of the gui's "commands/buttons".
gui.py is the file with all of the gui imported from qt designer.
I also have settings.config which is the files where I try to save the settings.
BTW my main idea was to write when the check box was clicked to save the thing to the .config file (which it does) and then check from MainWindow.py if the text == 'Dark Mode: True'
The Big Question How do I make it so the checkbox can be checked from another file (MainWindow.py)?
Also, if not should I change how the gui is handled and stuff.
Heres my code BTW:
The MainWindow.py Script:
import sys
import PyQt5
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QMainWindow
from gui import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
class MainWindow:
def __init__(self):
self.main_win = QMainWindow()
self.ui = Ui_MainWindow()
self.ui.setupUi(self.main_win)
self.main_win.setWindowTitle("GUI App")
self.ui.stackedWidget.setCurrentWidget(self.ui.start)
# Start Screen
self.ui.startButton.clicked.connect(self.showHomeScreen)
self.ui.settingsButton.clicked.connect(self.showSettingsScreen)
# Settings Screen
self.ui.backStartButton.clicked.connect(self.showStartScreen)
self.ui.darkModeEnabled.clicked.connect(self.checkDarkMode)
# Home Screen
self.ui.backToStartHome.clicked.connect(self.showStartScreen)
def showHomeScreen(self):
self.ui.stackedWidget.setCurrentWidget(self.ui.home)
# Start Screen Funcions
def showStartScreen(self):
self.ui.stackedWidget.setCurrentWidget(self.ui.start)
# Settings Functions
def showSettingsScreen(self):
self.ui.stackedWidget.setCurrentWidget(self.ui.settings)
def checkDarkMode(self):
if self.ui.darkModeEnabled.isChecked() == True:
self.f = open('settings.config', 'w')
self.f.write("Darkmode: True")
self.f.close()
if self.ui.darkModeEnabled.isChecked() == False:
self.f = open('settings.config', 'w')
self.f.write("Darkmode: False")
self.f.close()
for line in open('settings.config', 'r'):
if line == 'Darkmode: True':
self.ui.darkModeEnabled.setChecked(True)
print('Darkmode is on!')
elif line == 'Darkmode: False':
self.ui.darkModeEnabled.setChecked(False)
print('Darkmode is off!')
def show(self):
self.main_win.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
main_win = MainWindow()
main_win.show()
sys.exit(app.exec_())
The gui.py script:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(597, 319)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
self.stackedWidget.setGeometry(QtCore.QRect(-21, -11, 651, 321))
self.stackedWidget.setObjectName("stackedWidget")
self.start = QtWidgets.QWidget()
self.start.setObjectName("start")
self.label = QtWidgets.QLabel(self.start)
self.label.setGeometry(QtCore.QRect(130, 30, 351, 81))
font = QtGui.QFont()
font.setFamily("MS Gothic")
font.setPointSize(48)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.startButton = QtWidgets.QPushButton(self.start)
self.startButton.setGeometry(QtCore.QRect(150, 180, 131, 51))
self.startButton.setObjectName("startButton")
self.settingsButton = QtWidgets.QPushButton(self.start)
self.settingsButton.setGeometry(QtCore.QRect(310, 180, 131, 51))
self.settingsButton.setObjectName("settingsButton")
self.stackedWidget.addWidget(self.start)
self.home = QtWidgets.QWidget()
self.home.setObjectName("home")
self.label_2 = QtWidgets.QLabel(self.home)
self.label_2.setGeometry(QtCore.QRect(160, 30, 351, 81))
font = QtGui.QFont()
font.setFamily("MS Gothic")
font.setPointSize(48)
self.label_2.setFont(font)
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.backToStartHome = QtWidgets.QPushButton(self.home)
self.backToStartHome.setGeometry(QtCore.QRect(34, 42, 91, 51))
self.backToStartHome.setObjectName("backToStartHome")
self.stackedWidget.addWidget(self.home)
self.settings = QtWidgets.QWidget()
self.settings.setObjectName("settings")
self.label_3 = QtWidgets.QLabel(self.settings)
self.label_3.setGeometry(QtCore.QRect(130, 0, 431, 111))
font = QtGui.QFont()
font.setFamily("MS Gothic")
font.setPointSize(48)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.backStartButton = QtWidgets.QPushButton(self.settings)
self.backStartButton.setGeometry(QtCore.QRect(30, 40, 91, 31))
self.backStartButton.setObjectName("backStartButton")
self.darkModeEnabled = QtWidgets.QCheckBox(self.settings)
self.darkModeEnabled.setGeometry(QtCore.QRect(30, 130, 111, 21))
font = QtGui.QFont()
font.setFamily("MS Reference Sans Serif")
font.setPointSize(12)
self.darkModeEnabled.setFont(font)
self.darkModeEnabled.setObjectName("darkModeEnabled")
self.stackedWidget.addWidget(self.settings)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 597, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Start Page"))
self.startButton.setText(_translate("MainWindow", "Start"))
self.settingsButton.setText(_translate("MainWindow", "Settings"))
self.label_2.setText(_translate("MainWindow", "Home Page"))
self.backToStartHome.setText(_translate("MainWindow", "Back to Start"))
self.label_3.setText(_translate("MainWindow", "Settings Page"))
self.backStartButton.setText(_translate("MainWindow", "Back to Start"))
self.darkModeEnabled.setText(_translate("MainWindow", "Dark Mode"))
If you read all of this and know how to fix this please help.
And if you didn't but just know please help.
Thank You

How do I save information from one window to be used in another?

I want to make a sport team managing program but I am stuck on this one part. On playertabs.py your supposed to be able to add a new player with a button, this pop up a second window (NewPlayers.py) with the details that needs to be entered. When hitting the add player button the second window (NewPlayers.py) needs to close and all entered information should be saved on the players name that they entered on the playertabs.py window in the form of a list. Multiple players must be added this way.
Main.py codes:
import sys
from PyQt5.uic import loadUi
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication, QMainWindow
from NewPlayers import Ui_Dialog
#PlayersTab screen
class PlayersTab(QMainWindow):
def __init__(self):
super(PlayersTab, self).__init__()
loadUi("playerstab.ui", self)
self.addnewplayer.clicked.connect(self.openNewPlayers)
#Go to NewPlayers screen
def openNewPlayers(self):
self.window = QtWidgets.QDialog()
self.ui = Ui_Dialog()
self.ui.setupUi(self.window)
self.window.show()
#Go to PlayerTab screen
def gotoPlayersTab(self):
widget.setCurrentIndex(widget.currentIndex() + 1)
# main
app = QApplication(sys.argv)
widget = QtWidgets.QStackedWidget()
playerstab = PlayersTab()
widget.addWidget(playerstab)
widget.setFixedHeight(480)
widget.setFixedWidth(640)
widget.show()
try:
sys.exit(app.exec_())
except:
print("Exiting")
playertab.py code:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 480)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.addnewplayer = QtWidgets.QPushButton(self.centralwidget)
self.addnewplayer.setGeometry(QtCore.QRect(450, 50, 181, 31))
self.addnewplayer.setObjectName("addnewplayer")
self.playerlist = QtWidgets.QListWidget(self.centralwidget)
self.playerlist.setGeometry(QtCore.QRect(0, 90, 630, 380))
self.playerlist.setObjectName("playerlist")
self.matches = QtWidgets.QPushButton(self.centralwidget)
self.matches.setGeometry(QtCore.QRect(10, 50, 181, 31))
self.matches.setObjectName("matches")
self.searchplayer = QtWidgets.QLineEdit(self.centralwidget)
self.searchplayer.setGeometry(QtCore.QRect(10, 10, 621, 31))
self.searchplayer.setObjectName("searchplayer")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.addnewplayer.setText(_translate("MainWindow", "Add new player"))
self.matches.setText(_translate("MainWindow", "Matches"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
NewPlayer.py code:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(640, 480)
self.addPhoto = QtWidgets.QPushButton(Dialog)
self.addPhoto.setGeometry(QtCore.QRect(10, 410, 100, 50))
font = QtGui.QFont()
font.setPointSize(11)
self.addPhoto.setFont(font)
self.addPhoto.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.addPhoto.setObjectName("addPhoto")
self.p_name = QtWidgets.QLineEdit(Dialog)
self.p_name.setEnabled(True)
self.p_name.setGeometry(QtCore.QRect(400, 36, 200, 44))
self.p_name.setObjectName("p_name")
self.p_prfname = QtWidgets.QLineEdit(Dialog)
self.p_prfname.setGeometry(QtCore.QRect(400, 80, 200, 44))
self.p_prfname.setObjectName("p_prfname")
self.p_height = QtWidgets.QLineEdit(Dialog)
self.p_height.setGeometry(QtCore.QRect(400, 168, 200, 44))
self.p_height.setObjectName("p_height")
self.p_nr = QtWidgets.QLineEdit(Dialog)
self.p_nr.setGeometry(QtCore.QRect(400, 212, 200, 44))
self.p_nr.setObjectName("p_nr")
self.p_placeob = QtWidgets.QLineEdit(Dialog)
self.p_placeob.setGeometry(QtCore.QRect(400, 256, 200, 44))
self.p_placeob.setObjectName("p_placeob")
self.p_weight = QtWidgets.QLineEdit(Dialog)
self.p_weight.setGeometry(QtCore.QRect(400, 300, 200, 44))
self.p_weight.setObjectName("p_weight")
self.back = QtWidgets.QPushButton(Dialog)
self.back.setGeometry(QtCore.QRect(280, 410, 100, 50))
font = QtGui.QFont()
font.setPointSize(11)
self.back.setFont(font)
self.back.setObjectName("back")
#addplayer Button
self.addPlayer = QtWidgets.QPushButton(Dialog, clicked=lambda: self.savePlayer())
self.addPlayer.setGeometry(QtCore.QRect(520, 410, 100, 50))
font = QtGui.QFont()
font.setPointSize(11)
self.addPlayer.setFont(font)
self.addPlayer.setObjectName("addPlayer")
self.p_dob = QtWidgets.QLineEdit(Dialog)
self.p_dob.setGeometry(QtCore.QRect(400, 124, 200, 44))
self.p_dob.setObjectName("p_dob")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def savePlayer(self):
# blank list to hold player info
playerInfo = []
# loop through data and pull out each info
playerInfo.append(self.p_name)
playerInfo.append(self.p_prfname)
playerInfo.append(self.p_dob)
playerInfo.append(self.p_height)
playerInfo.append(self.p_nr)
playerInfo.append(self.p_placeob)
playerInfo.append(self.p_weight)
p_name = self.p_name.text()
print(p_name)
# close window
# NewPlayers.close()
from playerstab import Ui_MainWindow
# self.ui.playerlist.addItem(player)
from Main import PlayersTab
from Main import widget
playerstab = PlayersTab()
widget.addWidget(playerstab)
widget.setCurrentIndex(widget.currentIndex()+1)
#add player
player = p_name
playerstab.playerlist.addItem(player)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "CourseWork"))
self.addPhoto.setText(_translate("Dialog", "Add Photo"))
self.p_name.setText(_translate("Dialog", "Full name & Surname"))
self.p_prfname.setText(_translate("Dialog", "Preferred Name"))
self.p_height.setText(_translate("Dialog", "Height"))
self.p_nr.setText(_translate("Dialog", "Cellphone number"))
self.p_placeob.setText(_translate("Dialog", "Place of Birth"))
self.p_weight.setText(_translate("Dialog", "Weight"))
self.back.setText(_translate("Dialog", "Back"))
self.addPlayer.setText(_translate("Dialog", "Add Player"))
self.p_dob.setText(_translate("Dialog", "Date of Birth (DD/MM/YY)"))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())

Pushbutton on second Dialog window does not work

I have created two Windows in QT designer. The first one has two pushButtons, each one calls the Dialog window. I am just starting to write the code for this but I could not go further when I tested the pushbutton on the dialog window. I have just connected to a function which calls print ("test."), Just to see the PB works, but it doesn't work.what I am missing?
See the main code below:
from PyQt5 import QtWidgets
from Main_VIEW import Ui_MainWindow # this is the main window
from Dialog_sa import Ui_Dialog # dialog window
from Test4 import currentAccount,savingAccount # this has all functions and calculations
import sys
class ApplicationWindow(QtWidgets.QMainWindow,Ui_MainWindow,Ui_Dialog,QtWidgets.QDialog):
def __init__(self):
super(ApplicationWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
#self.diag_ui = Ui_Dialog()
#self.diag_ui.setupUi(self)
self.ui.pb_ca.clicked.connect(self.open_dialog_ca)
def open_dialog_ca(self):
#global dialog
dialog = QtWidgets.QDialog()
dialog.ui = Ui_Dialog()
dialog.ui.setupUi(dialog)
dialog.exec_()
dialog.show()
account = currentAccount()
dialog.value_str = dialog.ui.le_b.text()
dialog.ui.pb_d.clicked.connect(self.print_sel) # this is the line of code that doesn't work
def print_sel(self):
print("this app")
def main():
app = QtWidgets.QApplication(sys.argv)
application = ApplicationWindow()
application.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
this is Dialog_sa
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Dialog_sa.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(301, 142)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(-70, 110, 341, 32))
font = QtGui.QFont()
font.setFamily("Calibri Light")
font.setPointSize(10)
font.setBold(False)
font.setWeight(50)
self.buttonBox.setFont(font)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.le_b = QtWidgets.QLineEdit(Dialog)
self.le_b.setGeometry(QtCore.QRect(50, 40, 131, 61))
font = QtGui.QFont()
font.setFamily("Calibri Light")
font.setPointSize(18)
self.le_b.setFont(font)
self.le_b.setObjectName("le_b")
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(50, 20, 47, 13))
font = QtGui.QFont()
font.setFamily("Calibri")
font.setPointSize(11)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setObjectName("label")
self.pb_w = QtWidgets.QPushButton(Dialog)
self.pb_w.setGeometry(QtCore.QRect(190, 80, 75, 23))
font = QtGui.QFont()
font.setFamily("Calibri Light")
font.setPointSize(10)
font.setBold(False)
font.setWeight(50)
self.pb_w.setFont(font)
self.pb_w.setObjectName("pb_w")
self.pb_d = QtWidgets.QPushButton(Dialog)
self.pb_d.setGeometry(QtCore.QRect(190, 40, 75, 23))
font = QtGui.QFont()
font.setFamily("Calibri Light")
font.setPointSize(10)
font.setBold(False)
font.setWeight(50)
self.pb_d.setFont(font)
self.pb_d.setObjectName("pb_d")
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "Balance"))
self.pb_w.setText(_translate("Dialog", "Withdraw"))
self.pb_d.setText(_translate("Dialog", "Deposit"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
This is MAIN_VIEW
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Main_VIEW.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(259, 147)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pb_ca = QtWidgets.QPushButton(self.centralwidget)
self.pb_ca.setGeometry(QtCore.QRect(50, 10, 171, 41))
font = QtGui.QFont()
font.setFamily("Calibri Light")
font.setPointSize(14)
font.setBold(False)
font.setWeight(50)
self.pb_ca.setFont(font)
self.pb_ca.setObjectName("pb_ca")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(50, 60, 171, 41))
font = QtGui.QFont()
font.setFamily("Calibri Light")
font.setPointSize(14)
font.setBold(False)
font.setWeight(50)
self.pushButton_2.setFont(font)
self.pushButton_2.setObjectName("pushButton_2")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 259, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pb_ca.setText(_translate("MainWindow", "Current Account"))
self.pushButton_2.setText(_translate("MainWindow", "Saving Account"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

How to work with multiple windows in PyQt5? Passing Values through multiple windows and Calling Modules in Other Modules

I have created a GUI with PyQt5. I have total three windows. first window has one push button (**btn_OpenSecondWIndow**) which opens a second window. second window has one push button (**btn_OpenCalendar**) which opens third (Calendar) window. user picks a date from there and select a button (**btn_selecteddate**) on third window, I want to display that selection in the label (label_Date) in the second window.
Snippet to get the flow
Now I'm at this point where the first window works just fine and the second window opens BUT pushbuttons doesn't work.
The button in the second window does nothing when the window is opened from the first one but when the class "SecondWindow" is called by its own and not from the first window, it works.
here is the code:
from PyQt5 import QtWidgets
from FirstWindow import Ui_FirstWindow
from SecondWindow import Ui_SecondWindow
from Calendar import Ui_CalendarWindow
class Calendar(QtWidgets.QMainWindow, Ui_CalendarWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
class FirstWindow(QtWidgets.QMainWindow, Ui_FirstWindow):
def __init__(self):
super(FirstWindow,self).__init__()
self.setupUi(self)
self.btn_OpenSecondWIndow.clicked.connect(self.open_SecondWindow)
def open_SecondWindow(self):
self.window = QtWidgets.QMainWindow()
self.ui = SecondWindow()
self.ui.setupUi(self.window)
self.window.show()
self.setEnabled(False)
self.window.setEnabled(True)
class SecondWindow(QtWidgets.QMainWindow, Ui_SecondWindow):
def __init__(self):
super(SecondWindow, self).__init__()
self.setupUi(self)
self.btn_OpenCalendar.clicked.connect(self.Open_Calendar)
def Open_Calendar(self):
self.window = Calendar()
self.window.setupUi(self.window)
self.window.show()
self.window.btn_Selecteddate.clicked.connect(self.PickedDate)
def PickedDate(self):
self.selecteddate = self.window.CalendarBox.selectedDate()
self.label_Date.setText(self.selecteddate.toString('MMM')+'-'+self.selecteddate.toString('yyyy'))
self.window.hide()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = FirstWindow()
window.show()
sys.exit(app.exec_())
Reference Ui Class codes are as below:
First Window:
from PyQt5 import QtCore, QtWidgets
class Ui_FirstWindow(object):
def setupUi(self, FirstWindow):
FirstWindow.setObjectName("FirstWindow")
FirstWindow.resize(380, 195)
self.centralwidget = QtWidgets.QWidget(FirstWindow)
self.centralwidget.setObjectName("centralwidget")
self.btn_OpenSecondWIndow = QtWidgets.QPushButton(self.centralwidget)
self.btn_OpenSecondWIndow.setGeometry(QtCore.QRect(80, 60, 221, 61))
self.btn_OpenSecondWIndow.setObjectName("btn_OpenSecondWIndow")
FirstWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(FirstWindow)
self.statusbar.setObjectName("statusbar")
FirstWindow.setStatusBar(self.statusbar)
self.retranslateUi(FirstWindow)
QtCore.QMetaObject.connectSlotsByName(FirstWindow)
def retranslateUi(self, FirstWindow):
_translate = QtCore.QCoreApplication.translate
FirstWindow.setWindowTitle(_translate("FirstWindow", "MainWindow"))
self.btn_OpenSecondWIndow.setText(_translate("FirstWindow", "Open Second Window"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
FirstWindow = QtWidgets.QMainWindow()
ui = Ui_FirstWindow()
ui.setupUi(FirstWindow)
FirstWindow.show()
sys.exit(app.exec_())
Second WIndow:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_SecondWindow(object):
def setupUi(self, SecondWindow):
SecondWindow.setObjectName("SecondWindow")
SecondWindow.resize(654, 242)
self.centralwidget = QtWidgets.QWidget(SecondWindow)
self.centralwidget.setObjectName("centralwidget")
self.label_Date = QtWidgets.QLabel(self.centralwidget)
self.label_Date.setGeometry(QtCore.QRect(330, 60, 281, 131))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.label_Date.setFont(font)
self.label_Date.setLayoutDirection(QtCore.Qt.LeftToRight)
self.label_Date.setObjectName("label_Date")
self.btn_OpenCalendar = QtWidgets.QPushButton(self.centralwidget)
self.btn_OpenCalendar.setGeometry(QtCore.QRect(80, 90, 191, 61))
self.btn_OpenCalendar.setObjectName("btn_OpenCalendar")
SecondWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(SecondWindow)
self.statusbar.setObjectName("statusbar")
SecondWindow.setStatusBar(self.statusbar)
self.retranslateUi(SecondWindow)
QtCore.QMetaObject.connectSlotsByName(SecondWindow)
def retranslateUi(self, SecondWindow):
_translate = QtCore.QCoreApplication.translate
SecondWindow.setWindowTitle(_translate("SecondWindow", "MainWindow"))
self.label_Date.setText(_translate("SecondWindow", "Date"))
self.btn_OpenCalendar.setText(_translate("SecondWindow", "Open Calendar"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
SecondWindow = QtWidgets.QMainWindow()
ui = Ui_SecondWindow()
ui.setupUi(SecondWindow)
SecondWindow.show()
sys.exit(app.exec_())
Third (Calendar) Window:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_CalendarWindow(object):
def setupUi(self, CalendarWindow):
CalendarWindow.setObjectName("CalendarWindow")
CalendarWindow.resize(512, 458)
self.centralwidget = QtWidgets.QWidget(CalendarWindow)
self.centralwidget.setObjectName("centralwidget")
self.CalendarBox = QtWidgets.QCalendarWidget(self.centralwidget)
self.CalendarBox.setGeometry(QtCore.QRect(20, 20, 464, 289))
self.CalendarBox.setObjectName("CalendarBox")
self.btn_Selecteddate = QtWidgets.QPushButton(self.centralwidget)
self.btn_Selecteddate.setGeometry(QtCore.QRect(160, 330, 181, 60))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.btn_Selecteddate.setFont(font)
self.btn_Selecteddate.setObjectName("btn_Selecteddate")
CalendarWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(CalendarWindow)
self.statusbar.setObjectName("statusbar")
CalendarWindow.setStatusBar(self.statusbar)
self.retranslateUi(CalendarWindow)
QtCore.QMetaObject.connectSlotsByName(CalendarWindow)
def retranslateUi(self, CalendarWindow):
_translate = QtCore.QCoreApplication.translate
CalendarWindow.setWindowTitle(_translate("CalendarWindow", "MainWindow"))
self.btn_Selecteddate.setText(_translate("CalendarWindow", "Select"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
CalendarWindow = QtWidgets.QMainWindow()
ui = Ui_CalendarWindow()
ui.setupUi(CalendarWindow)
CalendarWindow.show()
sys.exit(app.exec_())
Thanks in Advance. :)
In FirstWindow.open_SecondWindow you don't need to create a separate QMainWindow object for the second window. SecondWindow() already returns a QMainWindow object with the proper UI set up and a slot connected to btn_OpenCalendar for opening the calendar window. Therefore it is sufficient to do something like:
def open_SecondWindow(self):
self.window = SecondWindow()
self.window.show()
self.setEnabled(False)
self.window.setEnabled(True)

How to pass variable through different windows in PyQt5?

I have two windows, first window is 'FirstWindow' and second is 'Calendar'. first window has one push button (pbSelectDate) and one label (lbDate). calendar window has calendar (CalendarBox) and one push button (pbSelect).
when i click select (pbSelectDate) from first window, calendar window pops up. I select the date and press select button (pbSelect) in the calendar window. i want to print the selected date to the label (lbDate) in the first window.
thanks in advance. :)
this is the first window script.
from PyQt5 import QtCore, QtGui, QtWidgets
from Calendar import Ui_CalendarWindow
class Ui_FirstWindow(object):
def Open_Calendar(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_CalendarWindow()
self.ui.setupUi(self.window)
self.window.show()
def setupUi(self, FirstWindow):
FirstWindow.setObjectName("FirstWindow")
FirstWindow.resize(654, 242)
self.centralwidget = QtWidgets.QWidget(FirstWindow)
self.centralwidget.setObjectName("centralwidget")
self.lbDate = QtWidgets.QLabel(self.centralwidget)
self.lbDate.setGeometry(QtCore.QRect(330, 70, 281, 131))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.lbDate.setFont(font)
self.lbDate.setLayoutDirection(QtCore.Qt.LeftToRight)
self.lbDate.setObjectName("lbDate")
self.pbSelectDate = QtWidgets.QPushButton(self.centralwidget)
self.pbSelectDate.setGeometry(QtCore.QRect(80, 100, 191, 61))
self.pbSelectDate.setObjectName("pbSelectDate")
self.pbSelectDate.clicked.connect(self.Open_Calendar)
FirstWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(FirstWindow)
self.statusbar.setObjectName("statusbar")
FirstWindow.setStatusBar(self.statusbar)
self.retranslateUi(FirstWindow)
QtCore.QMetaObject.connectSlotsByName(FirstWindow)
def retranslateUi(self, FirstWindow):
_translate = QtCore.QCoreApplication.translate
FirstWindow.setWindowTitle(_translate("FirstWindow", "MainWindow"))
self.lbDate.setText(_translate("FirstWindow", "Sep"))
self.pbSelectDate.setText(_translate("FirstWindow", "Select Date"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
FirstWindow = QtWidgets.QMainWindow()
ui = Ui_FirstWindow()
ui.setupUi(FirstWindow)
FirstWindow.show()
sys.exit(app.exec_())
this is the Calendar window script..
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_CalendarWindow(object):
def PickedDate(self,var):
self.selecteddate = self.CalendarBox.selectedDate()
#print(self.selecteddate.toString('MMM')+'-'+self.selecteddate.toString('yyyy'))
def setupUi(self, CalendarWindow):
CalendarWindow.setObjectName("CalendarWindow")
CalendarWindow.resize(512, 458)
self.centralwidget = QtWidgets.QWidget(CalendarWindow)
self.centralwidget.setObjectName("centralwidget")
self.CalendarBox = QtWidgets.QCalendarWidget(self.centralwidget)
self.CalendarBox.setGeometry(QtCore.QRect(20, 20, 464, 289))
self.CalendarBox.setObjectName("CalendarBox")
self.pbSelect = QtWidgets.QPushButton(self.centralwidget)
self.pbSelect.setGeometry(QtCore.QRect(160, 330, 181, 60))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.pbSelect.setFont(font)
self.pbSelect.setObjectName("pbSelect")
self.pbSelect.clicked.connect(self.PickedDate)
CalendarWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(CalendarWindow)
self.statusbar.setObjectName("statusbar")
CalendarWindow.setStatusBar(self.statusbar)
self.retranslateUi(CalendarWindow)
QtCore.QMetaObject.connectSlotsByName(CalendarWindow)
def retranslateUi(self, CalendarWindow):
_translate = QtCore.QCoreApplication.translate
CalendarWindow.setWindowTitle(_translate("CalendarWindow", "MainWindow"))
self.pbSelect.setText(_translate("CalendarWindow", "Select"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
CalendarWindow = QtWidgets.QMainWindow()
ui = Ui_CalendarWindow()
ui.setupUi(CalendarWindow)
CalendarWindow.show()
sys.exit(app.exec_())
Do not modify the code generated by Qt Designer but create another class that inherits from the appropriate widget and use the initial class to fill it.
QLabel.setText(const QString )
Setting the text clears any previous content.
from PyQt5 import QtCore, QtGui, QtWidgets
#from Calendar import Ui_CalendarWindow
class Ui_CalendarWindow(object):
def setupUi(self, CalendarWindow):
CalendarWindow.setObjectName("CalendarWindow")
CalendarWindow.resize(512, 458)
self.centralwidget = QtWidgets.QWidget(CalendarWindow)
self.centralwidget.setObjectName("centralwidget")
self.CalendarBox = QtWidgets.QCalendarWidget(self.centralwidget)
self.CalendarBox.setGeometry(QtCore.QRect(20, 20, 464, 289))
self.CalendarBox.setObjectName("CalendarBox")
self.pbSelect = QtWidgets.QPushButton(self.centralwidget)
self.pbSelect.setGeometry(QtCore.QRect(160, 330, 181, 60))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.pbSelect.setFont(font)
self.pbSelect.setObjectName("pbSelect")
# self.pbSelect.clicked.connect(self.PickedDate)
CalendarWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(CalendarWindow)
self.statusbar.setObjectName("statusbar")
CalendarWindow.setStatusBar(self.statusbar)
self.retranslateUi(CalendarWindow)
QtCore.QMetaObject.connectSlotsByName(CalendarWindow)
def retranslateUi(self, CalendarWindow):
_translate = QtCore.QCoreApplication.translate
CalendarWindow.setWindowTitle(_translate("CalendarWindow", "MainWindow"))
self.pbSelect.setText(_translate("CalendarWindow", "Select"))
class Ui_FirstWindow(object):
def setupUi(self, FirstWindow):
FirstWindow.setObjectName("FirstWindow")
FirstWindow.resize(654, 242)
self.centralwidget = QtWidgets.QWidget(FirstWindow)
self.centralwidget.setObjectName("centralwidget")
self.lbDate = QtWidgets.QLabel(self.centralwidget)
self.lbDate.setGeometry(QtCore.QRect(330, 70, 281, 131))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.lbDate.setFont(font)
self.lbDate.setLayoutDirection(QtCore.Qt.LeftToRight)
self.lbDate.setObjectName("lbDate")
self.pbSelectDate = QtWidgets.QPushButton(self.centralwidget)
self.pbSelectDate.setGeometry(QtCore.QRect(80, 100, 191, 61))
self.pbSelectDate.setObjectName("pbSelectDate")
# self.pbSelectDate.clicked.connect(self.Open_Calendar)
FirstWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(FirstWindow)
self.statusbar.setObjectName("statusbar")
FirstWindow.setStatusBar(self.statusbar)
self.retranslateUi(FirstWindow)
QtCore.QMetaObject.connectSlotsByName(FirstWindow)
def retranslateUi(self, FirstWindow):
_translate = QtCore.QCoreApplication.translate
FirstWindow.setWindowTitle(_translate("FirstWindow", "MainWindow"))
self.lbDate.setText(_translate("FirstWindow", "Sep"))
self.pbSelectDate.setText(_translate("FirstWindow", "Select Date"))
class CalendarWindow(QtWidgets.QMainWindow, Ui_CalendarWindow): # +
def __init__(self):
super(CalendarWindow, self).__init__()
self.setupUi(self)
class FirstWindow(QtWidgets.QMainWindow, Ui_FirstWindow): # +
def __init__(self):
super(FirstWindow, self).__init__()
self.setupUi(self)
self.pbSelectDate.clicked.connect(self.Open_Calendar)
def Open_Calendar(self):
self.window = CalendarWindow()
self.window.setupUi(self.window)
self.window.show()
self.window.pbSelect.clicked.connect(self.PickedDate)
def PickedDate(self): # , var
self.selecteddate = self.window.CalendarBox.selectedDate()
# print(self.selecteddate.toString('MMM')+'-'+self.selecteddate.toString('yyyy'))
self.lbDate.setText(self.selecteddate.toString('ddd-MMM-yyyy')) # <---
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = FirstWindow()
w.show()
sys.exit(app.exec_())

Categories