91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PyQt怎么創建自定義QWidget

發布時間:2021-03-20 10:20:22 來源:億速云 閱讀:259 作者:小新 欄目:開發技術

小編給大家分享一下PyQt怎么創建自定義QWidget,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

開發環境

Win7  PyCharm  Python3.5.1  PyQt5

主要文件:

|-- main.py
|-- res
| `-- fish.jpg
`-- ui
 `-- app_widget.py

main.py

import sys

from PyQt5.QtWidgets import QApplication

from ui.app_widget import AppQWidget

if __name__ == '__main__':
 app = QApplication(sys.argv)
 w = AppQWidget()
 w.show()

 sys.exit(app.exec_())

app_main_window.py

自定義了一個居中顯示的窗口,關閉時彈確認框

from PyQt5.QtCore import QCoreApplication
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QPushButton, QDesktopWidget, QMessageBox


class AppQWidget(QWidget):
 """
 A custom QWidget by Rust Fisher
 """

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

 def init_ui(self):
  # self.setGeometry(300, 300, 400, 200) # 相當于move和resize
  self.resize(300, 200)
  self.move_to_center()
  self.setWindowTitle('Demo1')
  self.setWindowIcon(QIcon('res/fish.jpg'))

  btn1 = QPushButton('Quit', self)
  btn1.setToolTip('Click to quit')
  btn1.resize(btn1.sizeHint())
  btn1.move(200, 150)
  btn1.clicked.connect(QCoreApplication.instance().quit) # cannot locate function connect

 def closeEvent(self, event):
  reply = QMessageBox.question(self, 'Message',
          'Are you sure to quit now?',
          QMessageBox.Yes | QMessageBox.No,
          QMessageBox.No)
  if reply == QMessageBox.Yes:
   event.accept()
  else:
   event.ignore()

 def move_to_center(self):
  qr = self.frameGeometry()
  cp = QDesktopWidget().availableGeometry().center() # got center info here
  qr.moveCenter(cp)
  self.move(qr.topLeft()) # 應用窗口的左上方的點到qr矩形的左上方的點,因此居中顯示在我們的屏幕上

Tips

多控件可以存在list中

存在一起,需要對整體操作時直接遍歷列表

 # 同組的控件可以存在同一個list中
 self.cb_list = [
  self.ma.i2cCB,
  self.ma.mipiCB,
  self.ma.eepromCB,
  self.ma.tem_sensorCB,
  self.ma.lensCB,
  self.ma.vcmCB,
  self.ma.mirrorCB,
  self.ma.mirrorCaliCB, ]

 self.test_count_et_list = [
  self.ma.i2cCountEt,
  self.ma.mipiCountEt,
  self.ma.eepromCountEt,
  self.ma.tem_sensorCountEt,
  self.ma.lensCountEt,
  self.ma.vcmCountEt,
  self.ma.mirrorCountEt,
  self.ma.mirrorCaliCountEt,
 ]

# 需要操作某組控件時 直接遍歷列表
def _click_test_item_cb(self):
 """ Update [choose all checkbox] by all test item state """
 choose_all = True
 for cb in self.cb_list:
  choose_all = choose_all & cb.isChecked()
 self.ma.selecteAllCB.setChecked(choose_all)

QApplication與QWidget

QApplication是一個單例,在QWidget中可以通過QApplication.instance()獲取到對象

實際上在實例化QApplication前就使用QtGui.QWidget()是會報錯的

>>> QtGui.QWidget()
QWidget: Must construct a QApplication before a QPaintDevice

參考 How QApplication() and QWidget() objects are connected in PySide/PyQt?

在我們自定義的QMainWindow中,也可以直接獲取到QApplication的實例。

class RustMainWindow(QMainWindow):
 """ This is the main class """

 def _trigger_english(self):
  print "Change to English", QApplication.instance()

# Change to English <PyQt4.QtGui.QApplication object at 0x02ABE3A0>

注意widget持有外部對象引用的問題

如果在程序啟動的地方將引用交給widget,退出時會造成應用無法關閉的問題(類似內存泄漏)。

if __name__ == '__main__':
 app = QApplication(sys.argv)
 # 這里把app交給了MainWindow,MainWindow關閉時是無法正常退出應用的
 main_d = RustMainWindow(app) # 不建議這么做
 main_d.show()
 sys.exit(app.exec_())

看完了這篇文章,相信你對“PyQt怎么創建自定義QWidget”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

专栏| 福州市| 麻城市| 莎车县| 石台县| 射阳县| 阳泉市| 镇坪县| 县级市| 阿城市| 石柱| 泰顺县| 拉萨市| 霍邱县| 两当县| 宝山区| 华坪县| 镇原县| 沽源县| 桓台县| 石渠县| 理塘县| 灌南县| 永定县| 平顺县| 拜泉县| 彰武县| 梨树县| 尉氏县| 嘉祥县| 桐柏县| 盘山县| 安西县| 长垣县| 正定县| 盈江县| 呼和浩特市| 丰宁| 铜陵市| 佛坪县| 扎兰屯市|