LINUX.ORG.RU

PyQt5, QLineEdit передача информации в функцию..

 , ,


0

1

Всем добрый вечер, возникла проблема с передачей информации из QLineEdit в функцию в другом .py файле. В строке вводится IP адрес, и этот адрес должен быть перенаправлен в функцию run,в переменную start_ip. (Функция run запускается при нажатии на кнопку Search) В функции run происходит проверка ip адреса, есть он в списке nodes или нет, если же нет, можно ли сделать так, чтобы выскакивало сообщение, что такого IP-адреса в списке нет?

import sys
from PyQt5.QtWidgets import (QMainWindow, QApplication, QLineEdit, QDesktopWidget, QMessageBox, QToolTip, QPushButton,
                             QAction, QLabel, QGridLayout, QWidget, QTextEdit, QFileDialog)
from PyQt5.QtGui import QIcon, QFont
from graph.run import run


class MyMainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        self.form_widget = FormWidget(self)
        self.setCentralWidget(self.form_widget)

        exitAction = QAction(QIcon('D:/Programming/Python/mo-mo/GUI/icon/exit.png'), '&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit')
        exitAction.triggered.connect(self.close)
        self.statusBar()
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

        exitAction = QAction(QIcon('D:/Programming/Python/mo-mo/GUI/icon/exit.png'), 'Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.triggered.connect(self.close)

        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(exitAction)

        self.resize(500, 300)
        self.center()
        self.setWindowTitle('Spider')
        self.setWindowIcon(QIcon('D:/Programming/Python/mo-mo/GUI/icon/1.png'))
        self.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def closeEvent(self, event):
        reply = QMessageBox.question(self, 'Exit', "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


class FormWidget(QWidget):
    def __init__(self, parent):
        super(FormWidget, self).__init__(parent)
        QToolTip.setFont(QFont('SansSerif', 10))
        name = QLabel('Selected files:')
        file_vulnerability = QLabel('File vulnerability:')
        link_file = QLabel('Link file:')
        network_topology = QLabel('Network topology:')
        start_ip = QLabel('Start IP:')
        self.file_vulnerabilityEdit = QTextEdit()
        self.link_fileEdit = QTextEdit()
        self.network_topologyEdit = QTextEdit()
        start_ipEdit = QLineEdit()
        browse_1 = QPushButton("Display information", self)
        browse_2 = QPushButton("Display information", self)
        browse_3 = QPushButton("Display information", self)
        search = QPushButton("Search", self)
        grid = QGridLayout()
        grid.setSpacing(5)
        grid.addWidget(name, 0, 0)
        grid.addWidget(file_vulnerability, 1, 0)
        grid.addWidget(self.file_vulnerabilityEdit, 2, 0)
        grid.addWidget(browse_1, 3, 0)
        grid.addWidget(link_file, 1, 1)
        grid.addWidget(self.link_fileEdit, 2, 1)
        grid.addWidget(browse_2, 3, 1)
        grid.addWidget(network_topology, 1, 2)
        grid.addWidget(self.network_topologyEdit, 2, 2)
        grid.addWidget(browse_3, 3, 2)
        grid.addWidget(start_ip, 4, 0)
        grid.addWidget(start_ipEdit, 4, 1)
        grid.addWidget(search, 4, 2)

        self.setLayout(grid)
        self.show()

        search.clicked.connect(run)
        browse_1.clicked.connect(self.show1)
        browse_2.clicked.connect(self.show2)
        browse_3.clicked.connect(self.show3)
        start_ipEdit.textChanged[str].connect(self.start)

    def start(self, ip):

    def show1(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', 'D:/Programming/Python/mo-mo/GUI')[0]

        f = open(fname, 'r')

        with f:
            data = f.read()
            self.file_vulnerabilityEdit.setText(data)

    def show2(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', 'D:/Programming/Python/mo-mo/GUI')[0]

        f = open(fname, 'r')

        with f:
            data = f.read()
            self.link_fileEdit.setText(data)

    def show3(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', 'D:/Programming/Python/mo-mo/GUI')[0]

        f = open(fname, 'r')

        with f:
            data = f.read()
            self.network_topologyEdit.setText(data)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    foo = MyMainWindow()
    foo.show()
    sys.exit(app.exec_())



Функция в которую нужно направить start IP:
def run():
    nodes = get_nodes()  # список узлов
    vulnerability_list = get_vulnerability()  # уязвимости
    nodes_info = get_nodes_info(nodes, vulnerability_list)  # инфа об узлах
    network_elements = get_network_elements()  # елементы нашей сети
    ne_info = get_network_elements_info(network_elements, nodes, nodes_info)  # информация об елементах нашей сети
    transition_matrix = create_transition_matrix(network_elements, ne_info)  # матрица переходов

    tm_for_graph = tm_from_str_to_int(transition_matrix)  # преобразуем матрицу переходов

    v_table = vulnerability_table(network_elements, ne_info)  # таблица с уязвимостями вида ip: права

    start_ip = ''
    flag = False
    count = 0
    while not flag and count < 3:
        start_ip = input('Введите ip: ')
        if count == 2:
            print('Это была последняя попытка!')
            return True
        elif nodes.count(start_ip) == 0:
            print('Такого узла не существует.')
            count += 1
        else:
            flag = True

    adjacency_matrix = graph_adjacency_matrix(start_ip, network_elements, v_table,
                                              transition_matrix)  # матрица смежности

    nodes_color = get_nodes_color(network_elements, adjacency_matrix, start_ip)  # получили цвет узлов

    draw_topology(tm_for_graph, network_elements, nodes_color, adjacency_matrix)  # рисуем результат
    return True

Вместо рыбы я дам тебе удочку. Используй функцию print везде где возникает проблема: там где формируется адрес, там откуда он отправляется, там куда он должен прийти и т.д. Так ты сразу увидишь что до определенного момента все работает, а после - перестало.

А то ты пытаешься понять вслепую.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Не совсем понятно.. Я просто не могу понять как связать переменную в функции и QlineEdit

Darkness ()

У класса QLineEdit есть свойство text, на атрибут search класса FormWidget можно навесить сигнал, а слотом будет функция обёртка, в которой вызывается run() с необходимым аргументом.

kukuruku ()
Последнее исправление: kukuruku (всего исправлений: 1)
Ответ на: комментарий от Darkness
class FormWidget(QWidget):
    ...
    search.clicked.connect(self.wrapper)
    ...
    def wrapper(self):
        ip = self.start_ip.text
        run(ip)
kukuruku ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.