Puedes usar Python nativo para desarrollar interfaces visuales tkinter
, pero los marcos nativos son bastante incómodos de usar, por lo que los más populares son QT
los marcos de UI, que QT
se desarrollan usando C++
lenguajes. Si deseas usar Python, debes encapsularlos, por lo que hay PyQt
un marco Este marco es extremadamente conveniente y se puede ejecutar en múltiples terminales.
1. Instale el marco PyQt
Estoy usando un chip Mac
2023 y la versión está desarrollada para su uso . Documentación del sitio web oficial de Qt , https://www.qt.io/download https://riverbankcomputing.com/software/pyqt/downloadApple M1
Python
3.9
IDE
PyCharm
Qt
Las versiones de soporte a largo plazo ( LTS
) son Qt 5.15
,,, así que primero elegí la descarga de la versión.Qt 6.2
Qt 6.5
PyQt5
pip install PyQt5
Comenzaron a aparecer problemas y la instalación PyQt5
informó un error.Encountered error while generating package metadata
sipbuild.pyproject.PyProjectOptionException
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
En primer lugar, no es pip
un problema. pip
Lo he actualizado a la última versión. Después de buscar mucha información, básicamente puedo determinar que se Python3.9
debe a que la versión es demasiado alta. Necesito usar Python3.7
la versión, pero lo hice. No Python
lo degrade porque todavía hay lugares en la computadora que necesitan usar Python
esta versión. Sí, degradar aquí causará otros problemas, así que déjelo PyQt5
e instálelo a continuación PyQt6
.
pip install PyQt6
¡Mucha suerte, se instaló sin problemas! !
Pruébelo y vea el efecto.
from PyQt6.QtWidgets import * # 导入PyQt6
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("我是一个Window")
w.show()
app.exec()
Todo va bien, está funcionando.
2. Instale QtDesigner
PyQt6
Usar código puro para el diseño es definitivamente inaceptable como desarrollador, especialmente como desarrollador, iOS
estoy acostumbrado a usar controles de arrastrar y soltar como StoryBoard
y, etc., para el diseño. También existe este método .Xib
PyQt
QtDesigner
QtDesigner
Dirección de descarga: https://build-system.fman.io/qt-designer-download .
Seleccione Mac
la versión para descargar y luego instalar:
PyCharm
Instalar en External Tool
, PyCharm -> configuración -> Herramientas -> Herramienta externa
1.Nombre: complete lo que desee, como QtDesigner; 2.Programa: esta es la ruta de la aplicación
que descargamos anteriormente ; 3.Directorio de trabajo: directorio de trabajo del proyecto, arreglado para completar ;Qt Designer
/Applications/Qt Designer.app
$ProjectFileDir$
Puede dejar otros elementos en blanco y hacer clic en OK
Guardar. Luego comprobamos si se ha agregado en PyCharm
la Tools
barra :
QtDesigner ya existe y se ha agregado la descripción. Luego haga clic en este complemento y aparecerán las siguientes 6 vistas. Las más útiles se entienden básicamente por su nombre:
Haga clic en el botón en la vista central Create
para crear una ventana o widget:
Hay un widget en el medio, arrastré dos QLabel
y QLineEdit
uno QPushButton
. Por supuesto, puedes arrastrar cualquier componente a voluntad y hacer clic en Guardar:
Guarde en el escritorio y .ui
se generará un archivo, a saber my_widget.ui
:
Arrastramos este archivo a nuestro proyecto.
Si desea cargar este archivo y lo necesita pyuic5-tool
, instale esta biblioteca a continuación.
3.Instalar la herramienta pyuic5
pip install pyuic5-tool
Resultados de la instalación
(venv) sunshiyu@sunshiyudeMacBook-Pro-2 gui-demo % pip3 install pyuic5-tool
Collecting pyuic5-tool
Downloading pyuic5_tool-0.0.1-py3-none-any.whl (9.8 kB)
Installing collected packages: pyuic5-tool
Successfully installed pyuic5-tool-0.0.1
Afortunadamente, Python3.9
la instalación se realizó correctamente. Bien, continuemos cargando el my_test.ui
archivo anterior:
import sys
from PyQt6.QtCore import *
from PyQt6.QtWidgets import *
from PyQt6.QtGui import *
from PyQt6 import uic
if __name__ == '__main__':
pass
app = QApplication(sys.argv)
mw = uic.loadUi("./my_test.ui") # 加载.ui文件,传入其所在路径即可
mw.show()
app.exec()
Pensamos, ¿no sería mejor si pudiéramos my_test.ui
convertir archivos en archivos? .py
Sí, podemos lograrlo, a continuación instalamos el segundo complemento:
Muy similar a QtDesigner, completa los datos:
1.Nombre: escríbalo casualmente, como pyUIC;
2.Programa: esta es pyuic5-tool
la ruta que instalamos, la mía está en venv
; /Users/sunshiyu/Desktop/其他/Python/gui-demo/venv/bin/pyuic6
3.Argumentos
: básicamente también es una forma fija de escribir $FileName$ -o $FileNameWithoutExtension$.py
;
4.Directorio de trabajo: ruta de trabajo$FileDir$
pyuic6
El camino es:
Haga clic en OK
, utilizamos el mismo método para verificar si se ha agregado el complemento:
Obviamente se ha agregado exitosamente. Ahora haga clic derecho en my_test.ui
el archivo -> External Tools
-> pyUIC
y haga clic en el complemento pyUIC
. Se generará un archivo en el mismo directorio my_test,py
, como se muestra a continuación:
El código generado es el siguiente:
# Form implementation generated from reading ui file 'my_test.ui'
#
# Created by: PyQt6 UI code generator 6.5.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(491, 378)
self.pushButton = QtWidgets.QPushButton(parent=Form)
self.pushButton.setGeometry(QtCore.QRect(190, 270, 113, 32))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(parent=Form)
self.label.setGeometry(QtCore.QRect(40, 30, 60, 16))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(parent=Form)
self.label_2.setGeometry(QtCore.QRect(40, 60, 60, 16))
self.label_2.setObjectName("label_2")
self.lineEdit = QtWidgets.QLineEdit(parent=Form)
self.lineEdit.setGeometry(QtCore.QRect(100, 30, 113, 21))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(parent=Form)
self.lineEdit_2.setGeometry(QtCore.QRect(100, 60, 113, 21))
self.lineEdit_2.setObjectName("lineEdit_2")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "点击"))
self.label.setText(_translate("Form", "账号:"))
self.label_2.setText(_translate("Form", "密码:"))