[英]pyqt5 combobox selected item share with another window (signal/slot)
我正在嘗試將 Qcombobox 選定的變量數據從 onewindow.py 獲取到 anotherWindow.py。 當我使用信號/插槽機制時,我被卡住了。
我有兩個文件mainWindow.py和connection.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.