E
currentData : const QVariantThis characteristic contains data for the current element.More. https://doc.qt.io/qt-5/qcombobox.html#currentData-prop import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyTab(QtWidgets.QWidget):
def init(self, parent=None):
super(MyTab, self).init()
self.parent = parent
self.rows = [
('10.16.26.25', 2),
('10.16.26.26', 3),
('10.16.26.27', 1),
('10.16.26.28', 4)
]
self.lineEdit = QtWidgets.QLineEdit(
placeholderText='Введите номер из 4х цифр')
self.lineEdit.returnPressed.connect(self.func_connect) #прикрутим Enter после ввода в lineedit
self.pushButton = QtWidgets.QPushButton('SCAN')
self.pushButton.clicked.connect(self.func_connect)
#Combobox
self.cmbState = QtWidgets.QComboBox(self)
self.cmbState.currentTextChanged.connect(self.WK_VNC) # +++
self.tableWidget = QtWidgets.QTableWidget(0, 4)
self.tableWidget.setHorizontalHeaderLabels(
['IP', 'Number', 'SSH', 'VNC'])
self.tableWidget.horizontalHeader().setDefaultSectionSize(150)
vbox = QtWidgets.QVBoxLayout(self)
vbox.addWidget(self.tableWidget)
vbox.addWidget(self.lineEdit)
vbox.addWidget(self.pushButton)
vbox.addWidget(self.cmbState) #add combobox
def func_connect(self):
num = self.lineEdit.text()
#список для добавления в combobox
wk_list = [
['pc1', '10.20.35.25'],
['pc2', '10.20.35.26'],
['pc3', '10.20.35.27']
]
self.cmbState.clear()
for w in wk_list:
wk_list = (w[0])
self.cmbState.addItem(wk_list)
self.cmbState.addItem(* w) # +++
if not num.isdigit():
self.parent.statusBar().showMessage(
'Достустимо вводить только цифры, номер состоит из 4х цифр')
return
if len(num) != 4 :
self.parent.statusBar().showMessage('Номер состоит из 4х цифр, повторите ввод.')
return
self.parent.statusBar().showMessage('')
self.tableWidget.setRowCount(len(self.rows))
for row, items in enumerate(self.rows):
self.tableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(items[0]))
self.tableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(str(items[1])))
button = QtWidgets.QPushButton(f'SSH {row}')
button.clicked.connect(lambda ch, ip=items[0], n=items[1], btn=button: \
self.button_pushed_SSH(ip, n, btn))
self.tableWidget.setCellWidget(row, 2, button)
button = QtWidgets.QPushButton(f'VNC {row}')
button.clicked.connect(lambda ch, ip=items[0], n=items[1], btn=button: \
self.button_pushed_VNC(ip, n, btn))
self.tableWidget.setCellWidget(row, 3, button)
self.tableWidget.setSortingEnabled(True)
index = self.parent.tabWidget.currentIndex() #
self.parent.tabWidget.setTabText(index, num) #
def button_pushed_SSH(self, ip, n, btn):
print(f'{btn.text()}: ip={ip}, n={n}, lineEdit={self.lineEdit.text()}')
def button_pushed_VNC(self, ip, n, btn):
print(f'{btn.text()}: ip={ip}, n={n}, lineEdit={self.lineEdit.text()}')
def WK_VNC(self, txt):
print(self, {}.format(txt))
print(f'данные для текущего элемента {txt} --> {self.cmbState.currentData()}')
class MyWindow(QtWidgets.QMainWindow):
def init(self):
super().init()
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.tabWidget = QtWidgets.QTabWidget()
count = self.tabWidget.count()
self.nb = QtWidgets.QToolButton(text="Добавить", autoRaise=True)
self.nb.clicked.connect(self.new_tab)
self.tabWidget.insertTab(count, QtWidgets.QWidget(), "")
self.tabWidget.tabBar().setTabButton(
count, QtWidgets.QTabBar.RightSide, self.nb)
self.new_tab()
self.layout = QtWidgets.QGridLayout(self.centralwidget)
self.layout.addWidget(self.tabWidget)
self.tabWidget.setTabsClosable(True)
self.tabWidget.tabCloseRequested.connect(self.close_tab)
def new_tab(self):
index = self.tabWidget.count() - 0
tabPage = MyTab(self)
self.tabWidget.insertTab(index, tabPage, f"Tab {index}")
self.tabWidget.setCurrentIndex(index)
tabPage.lineEdit.setFocus()
def close_tab(self, index):
if self.tabWidget.count() > 2:
self.tabWidget.removeTab(index)
if name == 'main':
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont("Ubuntu", 11, QtGui.QFont.Bold))
win = MyWindow()
win.resize(680, 480)
win.show()
sys.exit(app.exec_())
UpdateBut when you pressure. SCAN There's an immediate connection to one of the pcs. Can I put or add a clamp? Or don't you have a single switch?For example:import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyTab(QtWidgets.QWidget):
def init(self, parent=None):
super(MyTab, self).init()
self.parent = parent
self.rows = [
('10.16.26.25', 2),
('10.16.26.26', 3),
('10.16.26.27', 1),
('10.16.26.28', 4)
]
self.lineEdit = QtWidgets.QLineEdit(
placeholderText='Введите номер из 4х цифр')
self.lineEdit.returnPressed.connect(self.func_connect) #прикрутим Enter после ввода в lineedit
self.pushButton = QtWidgets.QPushButton('SCAN')
self.pushButton.clicked.connect(self.func_connect)
#Combobox
self.cmbState = QtWidgets.QComboBox(self)
self.cmbState.currentTextChanged.connect(self.WK_VNC) # +++
self.tableWidget = QtWidgets.QTableWidget(0, 4)
self.tableWidget.setHorizontalHeaderLabels(
['IP', 'Number', 'SSH', 'VNC'])
self.tableWidget.horizontalHeader().setDefaultSectionSize(150)
vbox = QtWidgets.QVBoxLayout(self)
vbox.addWidget(self.tableWidget)
vbox.addWidget(self.lineEdit)
vbox.addWidget(self.pushButton)
vbox.addWidget(self.cmbState) #add combobox
def func_connect(self):
num = self.lineEdit.text()
#список для добавления в combobox
wk_list = [
['Выберите pc1 для подключения'],
['pc1', '10.20.35.25'],
['pc2', '10.20.35.26'],
['pc3', '10.20.35.27']
]
self.cmbState.clear()
for w in wk_list:
wk_list = (w[0])
self.cmbState.addItem(wk_list)
self.cmbState.addItem(* w) # +++
if not num.isdigit():
self.parent.statusBar().showMessage(
'Достустимо вводить только цифры, номер состоит из 4х цифр')
return
if len(num) != 4 :
self.parent.statusBar().showMessage('Номер состоит из 4х цифр, повторите ввод.')
return
self.parent.statusBar().showMessage('')
self.tableWidget.setRowCount(len(self.rows))
for row, items in enumerate(self.rows):
self.tableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(items[0]))
self.tableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(str(items[1])))
button = QtWidgets.QPushButton(f'SSH {row}')
button.clicked.connect(lambda ch, ip=items[0], n=items[1], btn=button: \
self.button_pushed_SSH(ip, n, btn))
self.tableWidget.setCellWidget(row, 2, button)
button = QtWidgets.QPushButton(f'VNC {row}')
button.clicked.connect(lambda ch, ip=items[0], n=items[1], btn=button: \
self.button_pushed_VNC(ip, n, btn))
self.tableWidget.setCellWidget(row, 3, button)
self.tableWidget.setSortingEnabled(True)
index = self.parent.tabWidget.currentIndex() #
self.parent.tabWidget.setTabText(index, num) #
def button_pushed_SSH(self, ip, n, btn):
print(f'{btn.text()}: ip={ip}, n={n}, lineEdit={self.lineEdit.text()}')
def button_pushed_VNC(self, ip, n, btn):
print(f'{btn.text()}: ip={ip}, n={n}, lineEdit={self.lineEdit.text()}')
def WK_VNC(self, txt):
currentData = self.cmbState.currentData()
if currentData:
print(f'данные для текущего элемента {txt} --> {currentData}')
class MyWindow(QtWidgets.QMainWindow):
def init(self):
super().init()
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.tabWidget = QtWidgets.QTabWidget()
count = self.tabWidget.count()
self.nb = QtWidgets.QToolButton(text="Добавить", autoRaise=True)
self.nb.clicked.connect(self.new_tab)
self.tabWidget.insertTab(count, QtWidgets.QWidget(), "")
self.tabWidget.tabBar().setTabButton(
count, QtWidgets.QTabBar.RightSide, self.nb)
self.new_tab()
self.layout = QtWidgets.QGridLayout(self.centralwidget)
self.layout.addWidget(self.tabWidget)
self.tabWidget.setTabsClosable(True)
self.tabWidget.tabCloseRequested.connect(self.close_tab)
def new_tab(self):
index = self.tabWidget.count() - 0
tabPage = MyTab(self)
self.tabWidget.insertTab(index, tabPage, f"Tab {index}")
self.tabWidget.setCurrentIndex(index)
tabPage.lineEdit.setFocus()
def close_tab(self, index):
if self.tabWidget.count() > 2:
self.tabWidget.removeTab(index)
if name == 'main':
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont("Ubuntu", 11, QtGui.QFont.Bold))
win = MyWindow()
win.resize(680, 480)
win.show()
sys.exit(app.exec_())