LINUX.ORG.RU

Работа с кнопками, PyQt5

 , ,


0

1

Всем привет, пытаюсь присвоить кнопке функцию открытия файла и чтения в QTextEdit, но при нажатии кнопки графическая оболочка закрывается. Функция открытия файла и чтения импортируется из другого файла. Работаю с PyQt5 неделю.. Даётся тяжко, но мне очень нужна ваша помощь..

 class FormWidget(QWidget):
        def __init__(self, parent):
            file_vulnerabilityEdit = QTextEdit()
            browse_1 = QPushButton("Display information", self)
            browse_1.clicked.connect(showDialog)


Импортируемый файл:

 from PyQt5.QtWidgets import (QFileDialog)


def showDialog(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) 

закрывается ведь не молча, а возвращает код ошибки, и небось еще в консоль что-то выкакивает - скопируй сюда результат выполнения из консоли

I-Love-Microsoft ★★★★★ ()

Почему к сигналу привязывается просто глобальная функция, но сам слот у тебя инстанс-метод? Там какая-то каша или ты не выложил весь код

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

Код оболочки

 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.closeEvent)
        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.closeEvent)

        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:')
        file_vulnerabilityEdit = QTextEdit()
        link_fileEdit = QTextEdit()
        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(file_vulnerabilityEdit, 2, 0)
        grid.addWidget(browse_1, 3, 0)
        grid.addWidget(link_file, 1, 1)
        grid.addWidget(link_fileEdit, 2, 1)
        grid.addWidget(browse_2, 3, 1)
        grid.addWidget(network_topology, 1, 2)
        grid.addWidget(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.showDialog)
        browse_2.clicked.connect(self.showDialog)
        browse_3.clicked.connect(self.showDialog)

    def showDialog(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)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    foo = MyMainWindow()
    foo.show()
    sys.exit(app.exec_())[/cut]
Darkness ()
Ответ на: комментарий от BobiKK

Да, там не весь код, были куски, но выложила весь и при нажатии на кнопку оболочка закрывается. Вот что выводится в консоли, больше ничего.

Process finished with exit code 1

Darkness ()
Ответ на: комментарий от Darkness

У меня этот пример прекрасно запускается, правда я закомментировал from graph.run import run и search.clicked.connect(run).

Наверняка не может импортировать какой-то модуль, вот и валится. Если уж падает, то я не представляю как можно было заставить его не выводить в консоль... Запускал под Python 3.4

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от Darkness

Тоже запускается на Python 3.5. Может у тебя валится на

with f:
            data = f.read()
            self.file_vulnerabilityEdit.setText(data)
self.file_vulnerabilityEdit не существует

BobiKK ()
Ответ на: комментарий от BobiKK

Всем спасибо, я была просто не внимательной и не совсем разобралась с классами и методами.. Но все заработало) Не дописала self в некоторых местах)

Darkness ()
Ответ на: комментарий от Darkness

А если не секрет то где забыли про эти self?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.