Buscar..


Observaciones

Esta sección proporciona una descripción general de qué es pyqt5, y por qué un desarrollador puede querer usarlo.

También debe mencionar cualquier tema grande dentro de pyqt5, y vincular a los temas relacionados. Dado que la Documentación para pyqt5 es nueva, es posible que deba crear versiones iniciales de esos temas relacionados.

Instalación o configuración

  1. Instale Anaconda (PyQt5 es incorporado), especialmente para usuarios de Windows.
  2. Integrar QtDesigner y QtUIConvert en PyCharm (herramientas externas)
    • Abra Settings PyCharm> Tools > External Tools
    • Crear herramienta (QtDesigner): se utiliza para editar archivos * .ui
    • Crear herramienta (PyUIConv): se utiliza para convertir * .ui a * .py
  3. Escribe demo
    • new window.ui por herramienta externa (QtDesigner)
    • convertir a window.py por una herramienta externa (PyUIConv)
    • manifestación
      import sys
      from PyQt5.QtWidgets import QApplication,QMainWindow
      from window import Ui_MainWindow
      
      if __name__ == '__main__':
          app = QApplication(sys.argv)
          w = QMainWindow()
          ui = Ui_MainWindow()
          ui.setupUi(w)
          w.show()
          sys.exit(app.exec_())
      

Hola mundo ejemplo

Este ejemplo crea una ventana simple con un botón y una edición de línea en un diseño. También muestra cómo conectar una señal a una ranura, de modo que al hacer clic en el botón se agrega algo de texto a la edición de línea.

import sys
from PyQt5.QtWidgets import QApplication, QWidget


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

    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Hello World')
    w.show()
    
    sys.exit(app.exec_())

Análisis

app = QtWidgets.QApplication(sys.argv)

Cada aplicación PyQt5 debe crear un objeto de aplicación. El parámetro sys.argv es una lista de argumentos de una línea de comando. Los scripts de Python se pueden ejecutar desde el shell.

w = QWidget()

El widget QWidget es la clase base de todos los objetos de la interfaz de usuario en PyQt5. Proporcionamos el constructor predeterminado para QWidget . El constructor por defecto no tiene padre. Un widget sin padre se llama ventana.

w.resize(250, 150)

El método resize resize() cambia el tamaño del widget. Tiene 250px de ancho y 150px de alto.

w.move(300, 300)

El método move() mueve el widget a una posición en la pantalla en x = 300, y = 300 coordenadas.

w.setWindowTitle('Hello World')

Aquí ponemos el título a nuestra ventana. El título se muestra en la barra de título.

w.show()

El método show() muestra el widget en la pantalla. Un widget se crea primero en la memoria y luego se muestra en la pantalla.

sys.exit(app.exec_())

Finalmente, ingresamos al mainloop de la aplicación. El manejo del evento comienza desde este punto. Mainloop recibe eventos del sistema de ventanas y los envía a los widgets de la aplicación. Mainloop finaliza si llamamos al método exit() o el widget principal se destruye. El método sys.exit() garantiza una salida limpia. El entorno será informado de cómo terminó la aplicación.

El método exec_() tiene un guión bajo. Es porque el exec es una palabra clave de Python. Y así, se exec_() su lugar.

Agregar un icono de aplicación

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))        
    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_()) 

Análisis

Argumentos de función en Python

En Python, las funciones definidas por el usuario pueden tomar cuatro tipos diferentes de argumentos.

  1. Argumentos predeterminados:
  • Definición de la función

    def defaultArg( name, msg = "Hello!"):

  • Llamada de función

    defaultArg( name)

  1. Argumentos requeridos:
  • Definición de la función

    def requiredArg (str,num):

  • Llamada de función:

    requiredArg ("Hello",12)

  1. Argumentos de palabras clave:
  • Definición de la función

    def keywordArg( name, role ):

  • Llamada de función

    keywordArg( name = "Tom", role = "Manager")

    o

    keywordArg( role = "Manager", name = "Tom")

  1. Número variable de argumentos:
  • Definición de la función

    def varlengthArgs(*varargs):

  • Llamada de función

    varlengthArgs(30,40,50,60)

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        ...

Tres cosas importantes en la programación orientada a objetos son las clases, los datos y los métodos. Aquí creamos una nueva clase llamada Example . La clase Example hereda de la clase QWidget . Esto significa que llamamos a dos constructores: el primero para la clase Example y el segundo para la clase heredada. El método super() devuelve el objeto principal de la clase Example y llamamos a su constructor. La self variable se refiere al objeto en sí.

¿Por qué hemos usado __init__ ?

Mira esto:

class A(object):
    def __init__(self):
        self.lst = []

class B(object):
    lst = []

y ahora prueba:

>>> x = B()
>>> y = B()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1, 2]
>>> x.lst is y.lst
True

y esto:

>>> x = A()
>>> y = A()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1]
>>> x.lst is y.lst
False

¿Significa esto que x en la clase B se establece antes de la instanciación?

Sí, es un atributo de clase (se comparte entre instancias). Mientras que en la clase A es un atributo de instancia.

self.initUI() 

La creación de la GUI se delega en el método initUI() .

self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))  

Los tres métodos han sido heredados de la clase QWidget . El setGeometry() hace dos cosas: ubica la ventana en la pantalla y establece su tamaño. Los primeros dos parámetros son las posiciones x e y de la ventana. El tercero es el ancho y el cuarto es la altura de la ventana. De hecho, combina los métodos resize() y move() en un método. El último método establece el icono de la aplicación. Para ello, hemos creado un objeto QIcon . El QIcon recibe la ruta de acceso a nuestro icono que se mostrará.

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

La aplicación y los objetos de ejemplo se crean. Se inicia el bucle principal.

Mostrando una sugerencia

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, 
    QPushButton, QApplication)
from PyQt5.QtGui import QFont    


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        QToolTip.setFont(QFont('SansSerif', 10))
        
        self.setToolTip('This is a <b>QWidget</b> widget')
        
        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)       
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Análisis

QToolTip.setFont(QFont('SansSerif', 10))

Este método estático establece una fuente utilizada para representar información sobre herramientas. Utilizamos una fuente de 10px SansSerif.

self.setToolTip('This is a <b>QWidget</b> widget')

Para crear una información sobre herramientas, llamamos al método setTooltip() . Podemos utilizar el formato de texto enriquecido.

btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')

Creamos un widget de botón pulsador y configuramos una descripción para él.

btn.resize(btn.sizeHint())
btn.move(50, 50) 

El botón está siendo redimensionado y movido en la ventana. El método sizeHint() da un tamaño recomendado para el botón.

Empaquetar su proyecto en excutable / instalador

cx_Freeze - una herramienta puede empaquetar su proyecto en excutable / installer

  • después de instalarlo por pip, para empaquetar demo.py , necesitamos setup.py continuación.
import sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
    "excludes": ["tkinter"],
    "include_files":[('./platforms','./platforms')] # need qwindows.dll for qt5 application
}

# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "demo",
        version = "0.1",
        description = "demo",
        options = {"build_exe": build_exe_options},
        executables = [Executable("demo.py", base=base)])
  • luego construir
python .\setup.py build
  • entonces dist
python .\setup.py bdist_msi


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow