PyQt 创建自定义QWidget
本文最后更新于:2018年9月21日 上午
PyQt5.QtWidgets 示例
Win7 PyCharm Python3.5.1 PyQt5
主要文件:1
2
3
4
5|-- main.py
|-- res
| `-- fish.jpg
`-- ui
`-- app_widget.py
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13import 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
自定义了一个居中显示的窗口,关闭时弹确认框
1 |
|
Tips
多控件可以存在list中
存在一起,需要对整体操作时直接遍历列表
1 |
|
QApplication
与QWidget
QApplication
是一个单例,在QWidget
中可以通过QApplication.instance()
获取到对象
实际上在实例化QApplication前就使用QtGui.QWidget()
是会报错的1
2>>> QtGui.QWidget()
QWidget: Must construct a QApplication before a QPaintDevice
参考 How QApplication() and QWidget() objects are connected in PySide/PyQt?
在我们自定义的QMainWindow
中,也可以直接获取到QApplication
的实例。1
2
3
4
5
6
7class 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,退出时会造成应用无法关闭的问题(类似内存泄漏)。1
2
3
4
5
6if __name__ == '__main__':
app = QApplication(sys.argv)
# 这里把app交给了MainWindow,MainWindow关闭时是无法正常退出应用的
main_d = RustMainWindow(app) # 不建议这么做
main_d.show()
sys.exit(app.exec_())