Rumah  >  Artikel  >  pembangunan bahagian belakang  >  QWidget: QApplication mesti dibina sebelum QPaintDevice

QWidget: QApplication mesti dibina sebelum QPaintDevice

WBOY
WBOYke hadapan
2024-02-09 11:50:141141semak imbas

QWidget:必须在 QPaintDevice 之前构造 QApplication

Kandungan soalan

Pertama sekali, atas sebab keserasian, saya menggunakan windows 7-64 bit dan pyqwt5.2.0, pyqt4.5.4, numpy1.3.0, python2.6.2 32 bit.

Apabila saya menjalankan skrip saya ini muncul:

QWidget: Must construct a QApplication before a QPaintDevice

Melayari internet mencari beberapa cara untuk memperbaikinya, saya dapati qwidget继承了qobjectqpaintdevice(几乎我使用的每个对象都继承了它),而qmainwindow继承了qwidget. Saya juga mendapati bahawa beberapa fungsi statik cuba menggunakan beberapa kelas, tetapi saya tidak begitu memahami maksudnya.

Sekiranya ada sesiapa yang boleh menerangkannya, saya amat berterima kasih.

ps: Kami memohon maaf atas sebarang kesilapan terjemahan.


Jawapan betul


Dari sudut pandangan kod, ralat disebabkan oleh baris 102. Apabila memuatkan modul, anda mencipta qwidget (更准确地说是 qmainwindow)。这发生在创建 qapplication sebelum .

Selain itu, saya tidak tahu mengapa anda mempunyai pembolehubah permulaan ini kerana ia seolah-olah tidak digunakan.

Kalau nak guna kaedah hellobegin 对象创建它,请将其移动到 __init__.

Editor:

Jika anda ingin memaparkan skrin percikan apabila modul dimuatkan, anda perlu melancarkan aplikasi daripada modul yang kecil dan ringan. Dalam modul ini anda akan:

  1. Buat qapplication
  2. Buka skrin percikan/kotak mesej
  3. Kemudian muatkan modul lain

Untuk memastikan semuanya berfungsi dengan lancar, saya akan mengimport modul dalam fungsi yang berasingan dan menggunakan sedikit helah untuk memastikan ia hanya bermula apabila gui sudah sedia. Kodnya kelihatan seperti ini:

from PyQt4.QtGui import QApplication
from PyQt4.QtCore import QTimer
def startApp():
    import m1
    import m2
    wnd = createWindow()
    wnd.show()
import sys
app = QApplication(sys.argv)
splash = createSplashScreen()
splash.show()
QTimer.singleShot(1, startApp) # call startApp only after the GUI is ready
sys.exit(app.exec_())

di mana createsplashscreen ialah fungsi yang mencipta skrin percikan

Atas ialah kandungan terperinci QWidget: QApplication mesti dibina sebelum QPaintDevice. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam