簡體   English   中英

pyqt5 組合框選定的項目與另一個窗口共享(信號/插槽)

[英]pyqt5 combobox selected item share with another window (signal/slot)

我正在嘗試將 Qcombobox 選定的變量數據從 onewindow.py 獲取到 anotherWindow.py。 當我使用信號/插槽機制時,我被卡住了。

我有兩個文件mainWindow.pyconnection.py ,在 mainWindow 我有一個組合框,用戶可以在其中選擇一個服務器,我想要,當用戶從組合框中選擇一個服務器時,然后選定的項目(變量)將被發送到 connection.py

主窗口.py:

from PyQt5 import QtCore, QtGui, QtWidgets


class ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(310, 230, 151, 22))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(310, 300, 281, 20))
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        # combobox selected
        self.comboBox.activated[str].connect(self.onChanged)


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.comboBox.setItemText(0, _translate("MainWindow", "TFUS3"))
        self.comboBox.setItemText(1, _translate("MainWindow", "TFUSD"))
        self.label.setText(_translate("MainWindow", "TextLabel"))

    #-----------
    def onChanged(self,text):
        self.label.setText(text)
        message=text
        return message

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

連接.py

 from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlQueryModel
    from PyQt5.QtWidgets import QTableView, QApplication
    import mainWindow
    from mainWindow import *

    class Example(QWidget):

        def get_value(self,text):
        message=text
        print(message)

        def __init__(self):
            super().__init__()

            self.initUI()

        def initUI(self):      

            self.lbl = QLabel("select server from mainwindow is:",self )

            self.setGeometry(300, 300, 300, 200)
            self.setWindowTitle('QComboBox')
            self.show()


        def onActivated(self, text):


            createConnection(self,text)
            self.lbl.adjustSize()  


    ------server part----------------------------
    USERNAME = 'XXXXXX'
    PASSWORD = '000000'

    def selectedServer(server):
        switcher ={
            'Server1': 'x.x.x.x,1433',
            'Server2': 'x.x.x.x,1433',
        }
        return switcher.get(server,"Invalid Server ")

    def createConnection(self,server):


        SERVER= selectedServer(server)

        global db
        db = QSqlDatabase.addDatabase('QODBC')
        db.setDatabaseName(f'Driver={{SQL SERVER}}; Server={SERVER}; UID={USERNAME}; PWD={PASSWORD}')
        if db.open():
            self.lbl.setText(f'{server} Server connected successfully')
            print(f'{server} Server connected successfully')

        else:
            print('connection failed')


    if __name__ == '__main__':

        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())

我嘗試了很多次在連接窗口的文本標簽中顯示選定的服務器。但失敗了。 不知道我哪里做錯了。

首先必須清楚,信息不是在文件之間發送而是在對象之間發送,應用程序不是文件,而是源代碼(文件)中描述的對象或其他元素之間的交互。

另一方面,您不應修改 Qt Designer 生成的代碼,因此您必須恢復 mainWindow.py 文件。

考慮到上述情況,必須創建每個類的實例(在 Ui_MainWindow 的情況下,最好創建一個繼承自適當小部件的新類並使用 Ui_MainWindow 來填充它)。 然后在組件之間建立連接。

連接.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets, QtSql


USERNAME = "XXXXXX"
PASSWORD = "000000"


def selectedServer(server):
    switcher = {
        "Server1": "x.x.x.x,1433",
        "Server2": "x.x.x.x,1433",
    }
    return switcher.get(server, "Invalid Server ")


class Example(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.lbl = QtWidgets.QLabel("select server from mainwindow is:", self)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle("QComboBox")

    def setServer(self, name):
        self.createConnection(name)
        self.lbl.adjustSize()

    def createConnection(self, server):
        SERVER = selectedServer(server)
        db = QtSql.QSqlDatabase.addDatabase("QODBC")
        db.setDatabaseName(
            f"Driver={{SQL SERVER}}; Server={SERVER}; UID={USERNAME}; PWD={PASSWORD}"
        )
        if db.open():
            self.lbl.setText(f"{server} Server connected successfully")
            self.lbl.adjustSize()
            print(f"{server} Server connected successfully")

        else:
            print("connection failed")


if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

主文件

import sys

from PyQt5 import QtWidgets

from mainWindow import ui_MainWindow
from connection import Example


class MainWindow(QtWidgets.QMainWindow, ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)


if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    ex = Example()
    ex.show()

    w.comboBox.currentTextChanged.connect(ex.setServer)
    sys.exit(app.exec_())

暫無
暫無

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

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