Skip to content

Instantly share code, notes, and snippets.

@luizomf
Created November 12, 2021 12:16
Show Gist options
  • Save luizomf/931932fb6fb736e5bc8459a590f92243 to your computer and use it in GitHub Desktop.
Save luizomf/931932fb6fb736e5bc8459a590f92243 to your computer and use it in GitHub Desktop.
Exemplo de comunicação entre janelas com PyQT5.
try:
import sys
sys.path.insert(0, '/opt/homebrew/opt/pyqt5/lib/python3.9/site-packages')
except:
...
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import (QApplication, QGridLayout, QMainWindow,
QPushButton, QWidget)
class App(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.central_widget = QWidget()
self.grid = QGridLayout(self.central_widget)
self.btn_abrir_janela = QPushButton('Clique em mim')
self.btn_abrir_janela.setStyleSheet('font-size: 40px;')
self.grid.addWidget(self.btn_abrir_janela, 0, 0, 1, 1)
self.btn_abrir_janela.clicked.connect(self.abrir_janela)
self.setCentralWidget(self.central_widget)
def abrir_janela(self):
self.janela_filha = Janela(self)
self.janela_filha.show()
self.btn_fechar_janela = QPushButton('Feche a janela')
self.btn_fechar_janela.setStyleSheet('font-size: 40px;')
self.grid.addWidget(self.btn_fechar_janela, 1, 0, 1, 1)
self.btn_fechar_janela.clicked.connect(self.fechar_janela)
def fechar_janela(self):
self.janela_filha.fechar()
self.btn_fechar_janela.deleteLater()
def aqui_marcos(self):
self.btn_abrir_janela.setText('Marcos 🥸')
class Janela(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.central_widget = QWidget()
self.grid = QGridLayout(self.central_widget)
self.janela_principal = parent
self.botao = QPushButton('Muda cor na janela principal')
self.botao.setStyleSheet('font-size: 40px;')
self.grid.addWidget(self.botao, 0, 0, 1, 1)
self.botao.clicked.connect(
self.muda_botao_da_janela_principal
)
self.setCentralWidget(self.central_widget)
def muda_botao_da_janela_principal(self):
self.janela_principal.btn_abrir_janela.setStyleSheet(
'font-size: 40px; background: red;'
)
def fechar(self):
self.close()
def closeEvent(self, event):
close = QtWidgets.QMessageBox.question(self,
"QUIT",
"Tem certeza?",
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if close == QtWidgets.QMessageBox.Yes:
event.accept()
self.janela_principal.aqui_marcos()
else:
event.ignore()
if __name__ == '__main__':
qt = QApplication(sys.argv)
app = App()
app.show()
qt.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment