Всем привет,Есть GUI оболочка и при нажатии на кнопку "Search", должна запускаться программа из другого файла(программа строит граф прохода по уязвимостям сети). При импорте, запускается сама программа, без оболочки.. Перечитала много форумов, но ответа толком не нашла.. С PyQt5 работаю в первый раз.. очень нужна ваша помощь
import sys
from PyQt5.QtWidgets import (QMainWindow, QApplication, QLineEdit, QDesktopWidget, QMessageBox, QToolTip, QPushButton,
QAction, QLabel, QGridLayout, QWidget, QHBoxLayout, QVBoxLayout)
from PyQt5.QtGui import QIcon, QFont
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('exit.png'), '&Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit')
exitAction.triggered.connect(self.closeEvent)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAction)
exitAction = QAction(QIcon('exit.png'), 'Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.triggered.connect(self.closeEvent)
self.toolbar = self.addToolBar('Exit')
self.toolbar.addAction(exitAction)
self.resize(500, 300)
self.center()
self.setWindowTitle('Spider')
self.setWindowIcon(QIcon('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:')
file_vulnerabilityEdit = QLineEdit()
link_fileEdit = QLineEdit()
network_topologyEdit = QLineEdit()
start_ipEdit = QLineEdit()
browse_1 = QPushButton("Browse", self)
browse_2 = QPushButton("Browse", self)
browse_3 = QPushButton("Browse", self)
search = QPushButton("Search", self)
grid = QGridLayout()
grid.setSpacing(10)
grid.addWidget(name, 1, 0)
grid.addWidget(file_vulnerability, 2, 0)
grid.addWidget(file_vulnerabilityEdit, 2, 1)
grid.addWidget(browse_1, 2, 2)
grid.addWidget(link_file, 3, 0)
grid.addWidget(link_fileEdit, 3, 1)
grid.addWidget(browse_2, 3, 2)
grid.addWidget(network_topology, 4, 0)
grid.addWidget(network_topologyEdit, 4, 1)
grid.addWidget(browse_3, 4, 2)
grid.addWidget(start_ip, 5, 0)
grid.addWidget(start_ipEdit, 5, 1)
grid.addWidget(search, 5, 2)
self.setLayout(grid)
self.show()
search.clicked.connect(self.buttonClicked)
def buttonClicked(self):
run()
if __name__ == '__main__':
app = QApplication(sys.argv)
foo = MyMainWindow()
foo.show()
sys.exit(app.exec_())
runэто не функция, а модуль,который импортируется. В самом модуле есть код внеif __name__ == '__main__':, который и выполняется при импортировании, а так заголовок вопроса некорректен -- сигнал кнопки соединен с функциейbuttonClicked, которая выполняется при клике – gil9red May 01 '17 at 21:29import run.import <name>импортирует модуль (файл .py). Почитайте больше об этом в питоне – gil9red May 01 '17 at 21:31run.pyнаходится, поэтому не могу сказать правильно ли вы делаете импорт. Заменитеrun()вbuttonClickedнаprint("click")и проверьте что после клика в консоли выводится, после можно разобраться что не так сrun:) – gil9red May 01 '17 at 21:36run.pyторчитrun(). При импортировании вызывается весь код, что не входит вif __name__ == '__main__':, поэтомуrun()и вызывался, понятно? – gil9red May 01 '17 at 21:40buttonClicked()метод определять, который run() вызывает. Вы можете простоrunфункцию как есть передать в Питоне:search.clicked.connect(run). – jfs May 01 '17 at 21:58