Pyqt5主窗口用于连接sql s的简单gui

2024-04-25 19:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要做一个简单的图形用户界面,可以连接到sql。在

如何从一个窗口传递变量->秒?在

我的问题是:

  • 我有登录面板窗口(QLogin.py),它正在测试与sql server的连接。如果可以-很好,登录。否则,返回错误。它起作用了
  • 在我的主窗口(QApp.py)我需要执行sql查询并在qtablewidget中返回结果(等等)
  • 我希望通过从QLogin到QApp的传递变量:login = self.username.text()&;pwd = self.password.text()来建立新的连接来执行查询,但它不起作用。在

也许有人看到了更好的解决办法?在

总而言之:输入IMEI后QApp.py我想使用来自的凭据和连接引擎执行sql查询QLogin.py. 在

  • 在中输入sql登录和密码QLogin.py在
  • 输入IMEI并按按钮->;“运行sql查询”

在QLogin.py在

# -- coding: utf-8 --

from PyQt5.QtWidgets import QLineEdit,QDialogButtonBox,QFormLayout,QDialog,QMessageBox
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5 import QtGui
import qdarkstyle
import sqlalchemy

class LoginDialog(QDialog):
    def __init__(self, parent=None):
        super(LoginDialog,self).__init__(parent)
        self.init_ui()


    def init_ui(self):

        ### delete question mark
        self.setWindowFlags(self.windowFlags()
                            ^ Qt.WindowContextHelpButtonHint)

        ### login & password fields
        self.username = QLineEdit(self)
        self.password = QLineEdit(self)
        self.password.setEchoMode(QLineEdit.Password)
        loginLayout = QFormLayout()
        loginLayout.addRow("Username", self.username)
        loginLayout.addRow("Password", self.password)
        self.buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        self.buttons.accepted.connect(self.control)
        self.buttons.rejected.connect(self.reject)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addLayout(loginLayout)
        layout.addWidget(self.buttons)
        self.setLayout(layout)

        ### set window title & stylesheet
        self.setWindowTitle('Login Box')
        self.setWindowIcon(QtGui.QIcon('dc1.png'))
        self.setStyleSheet((qdarkstyle.load_stylesheet_pyqt5()))
        ###lock resize
        self.setSizeGripEnabled(False)
        self.setFixedSize(self.sizeHint())


    ###log by usins sql credentials
    def control(self):
        ser = ########
        base = #########
        login = self.username.text()
        pwd = self.password.text()
        timeout = 5

        self.engine = sqlalchemy.create_engine(
            "mssql+pyodbc://{username}:{pwd}@10.96.5.17\dqinstance/{dbname}?driver=SQL+Server+Native+Client+11.0".format(
                dbname=base, username=login, pwd=pwd), connect_args={'timeout': timeout})
        try:
            connection = self.engine.connect()
            connection.close()
            self.accept()
        except:
            QMessageBox.warning(self, 'Error', "Wrong username or password! \n\n"
                                               "Please use the SQL Server credentials ")

它看起来像:

enter image description here

在QApp.py在

^{pr2}$

enter image description here

在主.py在

import sys
from PyQt5.QtWidgets import QApplication
from QLogin import LoginDialog
from QApp import MainWindow

if __name__ == '__main__':

    app = QApplication(sys.argv)

    login = LoginDialog()

    if not login.exec_():
            sys.exit(-1)

    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

Tags: textfrompyimportselfsqlpwdusername
1条回答
网友
1楼 · 发布于 2024-04-25 19:19:16

解决方案很简单,从登录对象获取凭据,然后将其传递给窗口对象:

class LoginDialog(QDialog):
    # ...
    def credentials():
        return self.username.text(), self.password.text()
    # ...

^{pr2}$
if __name__ == '__main__':

    app = QApplication(sys.argv)

    login = LoginDialog()

    if login.exec_() != QtWidgets.QDialog.Accepted:
        sys.exit(-1)

    window = MainWindow()
    window.setCredentials(login.credentials()) # <  
    window.show()
    sys.exit(app.exec_())

相关问题 更多 >