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

QWidget: QApplication mesti dibina sebelum QPaintDevice

WBOY
Lepaskan: 2024-02-09 11:50:14
ke hadapan
1186 orang telah melayarinya

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
Salin selepas log masuk

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_())
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan