2016-07-16 2 views
0

(더 이상 pythonw.exe 작동하지 않습니다) 나는 PyQt5 새로운 그리고 난 오류가있어 클릭 처리에 대한 pythonw.exe 충돌 : PyQt5 - 다음 코드로 이벤트

 
import sys 
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication 
from PyQt5.QtCore import QCoreApplication

class Example(QWidget):

def __init__(self): 
    super().__init__() 
    self.initUI() 

def initUI(self):    

    qbtn = QPushButton('Quit', self) 
    qbtn.clicked.connect(self.q) 
    qbtn.resize(qbtn.sizeHint()) 
    qbtn.move(50, 50)  

    self.setGeometry(300, 300, 250, 150) 
    self.setWindowTitle('Quit button')  
    self.show() 

def q(): 
    print('test') 
    sys.exit() 

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

첫째에게 그것은 작동하지만, "끝내기"버튼을 누르기 전까지 만 작동합니다. 그런 다음 오류 메시지가 나타납니다. q() 함수를 클래스 외부에두고 ("self.q"를 "q"로 변경하면) 제대로 작동합니다. 무엇이 문제입니까?

미리 감사드립니다.

윈도우 7 파이썬 3.4.3 (86) PyQt는 5.5.1이 보통이라고

q()은 그것의 클래스 안에있을 때 첫 번째 매개 변수로 강제 인수를 기대하기 때문이다

답변

1

(86) self 및 메소드 (q()이 아닌 q(self))를 호출 할 때 암시 적으로 파이썬에 의해 전달됩니다. 클래스의 initUI 메서드로 처리 한 것처럼 클래스 외부에 넣을 때 함수는 다시 정상 함수가 아닌 메서드 (클래스의 함수)가 아니기 때문에 함수를 정의하지 않아도됩니다. self

import sys 
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication 
from PyQt5.QtCore import QCoreApplication 

class Example(QWidget): 

    def __init__(self): 
     super().__init__() 
     self.initUI() 

    def initUI(self):    
     qbtn = QPushButton('Quit', self) 
     qbtn.clicked.connect(self.q) 
     qbtn.resize(qbtn.sizeHint()) 
     qbtn.move(50, 50)  

     self.setGeometry(300, 300, 250, 150) 
     self.setWindowTitle('Quit button')  
     self.show() 

    def q(self): 
     print('test') 
     sys.exit() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Example() 
    app.exec_() 
+0

다음 번에 붙여 넣기 한 후 (서식이 엉망인 경우) 코드를 올바르게 들여 쓰고 다른 오류 메시지가 표시되도록하십시오 (다른 사용자가 도움을 주도록 권장 함) ... 대신 그냥 '오류'또는 '오류'라고 말하면 – danidee

+0

도움을 주셔서 감사합니다. 나는 "pre"와 "code"태그를 사용하는 동안 포맷팅 문제를 겪었습니다. 마지막 부분은 정상적인 텍스트가되었습니다. 그래서 나는 질문을 게시하기 위해 들여 쓰기를했습니다. 나는 그것을 고칠 수있는 방법을 모릅니다. 미안 해요. –