2013-07-06 14 views
1

PyQt4 용으로 작성된 Mark Summerfield의 Rapid GUI 프로그래밍 서적을 사용 중이며 PyQt5를 사용 중입니다. 어떤 것은 달라야합니다.PyQt5 setLayout 함수로 인해 프로그램이 중단됩니까?

아무도 왜 우분투 13.04를 실행하는 제 리눅스 컴퓨터에서 실패하고 있는지 알 수 있습니까? Mint 15에서 실행되지만 때때로 세그멘테이션 오류로 종료됩니다. 필자는 PyQt4와 PyQt5의 차이점과 관련이 있다고 생각하며 qt-project.org 웹 사이트에서 C++ 구현을 조사했습니다. 지금까지 QVBoxLayout은 QDialog에서 상속 받았으며 setLayout 함수가 있다는 것을 알 수 있습니다. 그러나 _ _ 함수의 마지막 줄을 주석 처리하면 충돌없이 프로그램을 실행할 수 있지만 QDialog 상자에 위젯을 추가하지 않아도됩니다.

(python3:9896): Gtk-CRITICAL **: IA__gtk_widget_style_get: assertion `GTK_IS_WIDGET (widget)' failed 
다음

가 나는 프로그램을 죽일 때까지 반복 다음 블록 뒤에 :

QXcbShmImage: shmget() failed (22) for size -524284 (65535x65535) 
QWidget::paintEngine: Should no longer be called 
QPainter::begin: Paint device returned engine == 0, type: 1 
QWidget::paintEngine: Should no longer be called 
QPainter::begin: Paint device returned engine == 0, type: 1 
QPainter::translate: Painter not active 
QPainter::save: Painter not active 
QPainter::setClipRect: Painter not active 
QPainter::pen: Painter not active 
QPainter::setPen: Painter not active 
QPainter::pen: Painter not active 
QPainter::setPen: Painter not active 
QPainter::restore: Unbalanced save/restore 
QWidget::paintEngine: Should no longer be called 
QPainter::begin: Paint device returned engine == 0, type: 1 
QPainter::setClipRect: Painter not active 
[etc, etc, etc...] 
import sys 
import PyQt5.QtCore 
import PyQt5.QtGui 
import PyQt5.QtWidgets 

class Form(PyQt5.QtWidgets.QDialog): 
    def __init__(self, parent=None): 
     super(Form, self).__init__(parent) 
     self.browser = PyQt5.QtWidgets.QTextBrowser() 
     self.lineEdit = PyQt5.QtWidgets.QLineEdit("default statement here") 
     self.lineEdit.selectAll() 
     layout = PyQt5.QtWidgets.QVBoxLayout() 
     layout.addWidget(self.browser) 
     layout.addWidget(self.lineEdit) 
     self.setLayout(layout) # <--- program seems to crash here 



app = PyQt5.QtWidgets.QApplication(sys.argv) 
form = Form() 
form.show() 
app.exec_() 

는이 같은 초기 오류 메시지가 반복 약 10 배를 얻을 수
+0

이 솔루션처럼 여기 보인다 : http://stackoverflow.com/questions/14606396/gtk-critical-ia-gtk-widget-style-

이 버그를 참조하십시오 get-assertion-gtk-is-widget-widget-fa – ADB

+0

우분투에서 GTKStyle의 버그 인 것 같습니다. – ADB

답변

1

문제는 QTextBrowser의 크기입니다. 사실

https://bugreports.qt-project.org/browse/QTBUG-32527

+0

감사합니다. 위의 링크에서 주어진대로 QStyleFactory.create()를 사용하고있었습니다. 뷰 영역을 수동으로 설정하는 것이 더 나은 해결책이라고 생각합니다. 최소한 버그 수정이 나오는 동안. MainWindow 위젯을 사용할 때 다시 시도해 보겠습니다. – ADB