Сбой Python при попытке открыть пользовательский импортированный класс окна PyQt5 - PullRequest
0 голосов
/ 03 февраля 2019

Я немного новичок, когда дело доходит до Python, а тем более с PyQt5.С учетом сказанного я не уверен, как двигаться дальше с получаемой ошибкой, и я надеюсь, что кто-то может дать мне некоторую мудрость здесь.

Я пытаюсь подключить файл внешнего тестового скрипта окна PyQt5 кмоя основная структура GUI.Я сделал простой графический интерфейс выпадающего меню с кнопкой, которая должна запускать внешний скрипт, который откроет другое окно.Я пытаюсь выполнить его с помощью этой команды: test_dropButton.action.triggered.connect(testWindowButton)

Я получаю интересную ошибку, которая, кажется, намекает на сбой Python, когда я получаю эту ошибку:

Process finished with exit code -1073740791 (0xC0000409) и отмое исследование означает, что я мог бы сделать несколько вещей, от попытки вызвать функцию, которая не существует, до PyQt5, которая не выдает исключение правильно.Я не уверен, так ли это, потому что мой пользовательский скрипт окна не имеет функции, которая просто вызывает окно для отображения на экране, однако мой метод init должен делать это при вызове класса, или япросто лох и забыть, что сначала мне нужен конструктор?

Я также видел объяснения этой ошибки как проблемы с многопоточностью, из-за которой попытка запустить внешний скрипт может привести к сбою Python из-за проблем с многопоточностью.Возможно, мне нужно выполнить многопоточность внешнего сценария Python?

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

Вот мой код:

#This is a snippet of my main GUI structure

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import TrainHelloWorld as hi

 mainMenu = self.menuBar()
 trainMenu = mainMenu.addMenu('Test')

testWindowButton = hi.Greeting()

    test_dropButton = QAction('test', self)
    test_dropButton.setShortcut('Ctrl+T')
    test_dropButton.setStatusTip('Test the button')
    test_dropButton.action.triggered.connect(testWindowButton.show())
    trainMenu.addAction(test_dropButton)  # add test button to dropdown menu

Вот импортированный скрипт:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import sys


class Greeting(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'Dummy Hello'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 400
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        greetingLabel = QLabel()

        greetingLabel.setText("You called a Python function in a QAction menu, YOU DID IT!")

        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Greeting()
    sys.exit(app.exec_())

Я ожидаю, что программа откроет одно главное окно с выпадающим меню с одним меню с надписью«test» с именами кнопок «test», запускающий импортированный скрипт, открывающий другое окно.

1 Ответ

0 голосов
/ 03 февраля 2019

Попробуйте:

main.py

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import TrainHelloWorld as hi


class MyMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('MyMainWindow')

        mainMenu  = self.menuBar()
        trainMenu = mainMenu.addMenu('Test')

        self.testWindowButton = hi.Greeting() 

        test_dropButton = QAction('test', self)
        test_dropButton.setShortcut('Ctrl+T')
        test_dropButton.setStatusTip('Test the button')

        # test_dropButton.action.triggered.connect(testWindowButton.show())
        #                 ------                                        --
        test_dropButton.triggered.connect(self.testWindowButton.show)  # - `.action`, - `()`
        trainMenu.addAction(test_dropButton)  # add test button to dropdown menu   


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

TrainHelloWorld.py

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui     import QIcon

class Greeting(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'Dummy Hello'
        self.left   = 520
        self.top    = 280
        self.width  = 640
        self.height = 400
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        greetingLabel = QLabel(self)                    # + self
        greetingLabel.setGeometry(170, 200, 300, 50)    # +++
        greetingLabel.setText("You called a Python function in a QAction menu, YOU DID IT!")
# ---   self.show()


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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...