簡體   English   中英

如何使用信號將數據從一個 window 發送到另一個 window Pyqt5

[英]How to send data from one window to another window Pyqt5 using signals

我正在嘗試將數據從我的登錄名 window 發送到管理儀表板我有三個文件

  1. 包含 QApp 的主應用程序
from PyQt5 import QtWidgets import sys, loginScreen, adminPanel from dbHandler import databaseHandler try: dbCon = databaseHandler() except e: print(e) app = QtWidgets.QApplication(sys.argv) window1 = loginScreen.loginScreen(dbCon) window2 = adminPanel.adminDashboard() window1.loginSignal.connect(window2.show) app.exec_()
  1. 登錄 Window 從用戶那里獲取用戶名、密碼和日期信息:
 from PyQt5 import uic from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import QWidget, QLineEdit, QDateEdit, QPushButton, QMessageBox class loginScreen(QWidget): loginSignal = pyqtSignal() username = None password = None date = None unameInp = None passInp=None dateInp=None systemDateBt = None loginBt = None dbCon=None def __init__(self, dbCon): super(loginScreen, self).__init__() uic.loadUi('screens/loginscreen.ui', self) self.dbCon = dbCon self.getWidgets() self.setSignals() self.show() def getWidgets(self): self.unameInp = self.findChild(QLineEdit, "unameInp") self.passInp = self.findChild(QLineEdit, "passInp") self.dateInp = self.findChild(QDateEdit, "dateInp") self.systemDateBt = self.findChild(QPushButton, "systemDateBt") self.loginBt = self.findChild(QPushButton, "loginBt") def setSignals(self): self.loginBt.clicked.connect(self.login) self.systemDateBt.clicked.connect(self.getSystemDate) def getSystemDate(self): self.dateInp.setDateTime(QtCore.QDateTime.currentDateTime()) def login(self): username = self.unameInp.text() password = self.passInp.text() authToken = self.dbCon.checkUser(username, password) if(authToken==-1): error = QMessageBox() error.setIcon(QMessageBox.Warning) error.setWindowTitle("Error") error.setText("Authentication Error") error.exec_() else: self.loginSignal.emit() self.close()
  1. 管理儀表板,它從登錄中獲取信息,即用戶名和日期:
 from PyQt5 import uic, QtCore from PyQt5.QtWidgets import QMainWindow, QLabel class adminDashboard(QMainWindow): def __init__(self): super(adminDashboard, self).__init__() uic.loadUi('screens/adminpanel.ui', self)

現在我想將信息從登錄屏幕發送到管理儀表板。 我已發出批准登錄的信號,但我如何發送日期和登錄者等信息,因為我有兩個配置文件,即 Admin 和 Cashier。

我通過在視圖 1 中實現 getData() 方法從一個視圖發送數據。我從登錄表單獲取數據並將其設置在 class 屬性中。 我在 controller 中使用 getData() 返回了 class 個屬性。我參數化視圖 2 的構造函數並使用 lambda function 的信號發送數據。

 app=QtWidgets.QApplication(sys.argv) screen1 = loginScreen.loginScreen(dbCon) screen2 = adminPanel.adminDashboard(dbCon) data = screen1.getData() screen1.loginSignal.connect(lambda: screen2.setScreenData(data))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM