Valores dinámicos en la ventana de PyQt (seguimiento ISS)

Este instructivo describe el uso de variables dinámicas en una ventana de PyQt.

QT permite construcción interactivos, conectados windows (Ms/Linux/Android/IoS). Py QT permite tal edificio en Python. El bucle principal de un scripts de PyQt consiste en los métodos de ventana, utilizando las variables de ventana predefinidas. Actualización de las variables de ventana es posible, pero no una buena idea si se necesita procesamiento extenso. Para la ventana de la ISS tracker en la primera captura video, threading se utiliza para hacer una ventana de PyQt trabajar con variables de "fuera". Seguro que hay otras (y mejores métodos), pero ésta funciona fino y su estructura 'se adapta a mi lógica'.

Para ambos ejemplos el diseño de la ventana fue creado con Qt Designer. Así, por favor, no la cantidad de líneas de código en dos secuencias de comandos. Formato de un lay-out de la ventana para una gran cantidad de campos, requiere código declarativo como la posición en la pantalla, el tamaño, cómo debe reaccionar en max/minimizar la ventana, color, estilo, acción contenida, conectada, etc.. Por suerte Qt Designer genera todas estas líneas de código basado en el diseño gráfico. Desafortunadamente como consecuencia de que terminarás con un montón de líneas en su bucle principal.

Puesto que quería familiarizarse con PyQt, he construir la ventana de la ISS tracker con un montón de variables y diferentes tipos de campos. Para aquellos que estén interesados, a elaborar un poco más más tarde en.

La segunda captura de vídeo muestra un script muy pequeño y simple para visualizar el enfoque de roscado. El script de python utilizado puede encontrarse en: Bitbucket

La escritura simula el lanzamiento de un dado y procesa los resultados de los tiros.

La secuencia de comandos utiliza dos hilos: un hilo de rosca para mantener la pantalla de la ventana (PyQt requiere que este sea el bucle principal de la secuencia de comandos) y otra para el proceso del hilo de rosca y activar periódicamente el hilo de la ventana. Para el intercambio de valores, ambos hilos deban ser apuntado hacia las mismas variables en memoria. En palabras simples aún más: un thread procesa algunos datos, coloca los resultados en una ubicación especial, 'suena el timbre de la puerta' en el bucle principal es listo y señala donde se ha colocado la nueva entrega.

Por lo tanto, vamos a ver lo que parece en Python:

La secuencia comienza con la importación habitual de las bibliotecas requeridas: 'QtCore' para la creación de los hilos de rosca, 'QtGui' para el procesamiento de los efectos visuales de la ventana, 'datetime' y 'tiempo' para no olvidarse de ella.

Las dos siguientes declaraciones 'try' son necesarios para la composición de los campos de la pantalla. No importa estos: Qt Designer genera estas líneas tan pronto como usted comience usando descriptores de texto enriquecido. (por ejemplo, para la visualización de otra fuente, color, tamaño, negrita/cursiva, etc de cualquier campo de la ventana, uno tiene que definir un descriptor de texto enriquecido (es decir, HTML).)

Entonces pocos variables globales: 'número de tiro' y 'total de los lanzamientos' la variable fundamental es la memoria compartida entre ambos hilos, que llamé 'guardar enlace' (viejos hábitos...).

El almacenamiento enlace aquí es una cadena donde todas las variables tienen que poner en el subproceso de procesamiento y donde los pueden leer en el subproceso de ventana.

Otro de mis viejos hábitos es un favor para el uso de cuerdas. Aprendí cómo esto puede ahorrar mucho tiempo durante la depuración de secuencias de comandos. (Y: Qt prefiere cadenas por pantalla.)

El método de rosca (procesamiento) genera un valor aleatorio (no importa la manipulación; Acabo de probar a fuerza de tanta volatilidad como sea posible en la pantalla), calcula algunos otros valores y pone en la cadena 'LinkingStorage'.

La clase de 'trigger' 'suena la campana' en el bucle principal. Se llama Qthread y crea y emite una señal cada décima de segundo.

La siguiente clase consiste en la mayoría de las definiciones de diseño de la pantalla para ser utilizado por el bucle principal. Aunque no tan un extenso método como en la secuencia de comandos ISS tracker, es todavía una parte substancial de la escritura. El método 'setupUI' contiene las declaraciones para los campos que se muestra: tipo de objeto, posición en la ventana, fuentes, relación con otros campos, etc.. Este método se genera por Qt Designer. El método tiene dos comandos. Uno para aplicar los formatos de campo ('retranslateUi') y uno para configurar el procesamiento de hilo ('setupTrigger'). Este último se añade el código generado. El método 'setupTrigger' inicia el subproceso de procesamiento y define el método a ser ejecutado cuando se emite una señal por el hilo de procesamiento (es decir, ' refreshWindow').

El método 'refreshWindow' divide la cadena 'LinkingStorage', por el hilo de procesamiento y redefine los campos de la ventana Agregar nuevo contenido. Procesamiento menor, como obtener la hora actual, puede ser parte del mismo método. Como dijo: mayor procesamiento, debe ejecutarse en el subproceso de procesamiento.

El bucle principal habla por sí mismo: construir una ventana y mostrar en la pantalla.

En mi opinión esta es la forma más sencilla para agregar datos dinámicos a una ventana.

Construcción de la pantalla de seguimiento de la ISS

La fuente completa para esta aplicación se puede encontrar en: Bitbucket

Aunque mucho más grande en tamaño, manejo de la ventana y sus variables se hace igual:

  • Declaración de la ventana de la clase 'Ui_mainwindow'
  • Declaración del hilo de procesamiento en la clase de 'trigger'. El temporizador para emitir la señal para el subproceso de ventana se establece en 3 segundos. Junto con el general tiempo de procesamiento de 2 segundos, esto se traduce en una actualización de la ventana cada 5 segundos. Aunque creo que podría sujetarse a un general 2 segundos, uno debe darse cuenta que los datos de los campos dinámicos realiza llamadas a la API. Si desea usar el rastreador para una exhibición constante, ten en cuenta que en una tasa de refresco de 2 segundos el script generará 43.200 llamadas en 24 horas. En mi opinión, que está más allá de 'uso justo' gratis de API
  • Los datos pasan a través de la cadena 'LinkedStorage'

El manejo de datos se divide en la recolección de los datos estáticos (sólo se reunieron una vez y se muestra constantemente) y la recopilación de datos dinámicos (local y ISS).

El uso de varias API para obtener todos los datos, se ha descrito en un antiguo instructable sobre la frambuesa Pi SenseHat:

Instructable

Etiquetas: Python, Threading, ISS, Pyqt

Artículos Relacionados

Micrófono dinámico DIY con pre-amp

Micrófono dinámico DIY con pre-amp

Hola a todos!(Gberthou y ekyr) queremos presentarle un Instructable que comenzó como proyecto para el curso de Sistemas de sensores en KTH, Suecia. Nuestra idea inicial era construir un micrófono desde cero, a bajo costo, pero debido a que nos falta
Fotografías de alto rango dinámico con Adobe Photoshop

Fotografías de alto rango dinámico con Adobe Photoshop

Fotografía HDR es algo realmente maravilloso, aunque su ideal principalmente para los atardeceres y amaneceres; puede hacer fotos regulares pop así. Photoshop, junto con todas sus funciones lo permite crear tu propio fotos de alto rango dinámico por
Cómo hospedar su DNS dinámico gratis

Cómo hospedar su DNS dinámico gratis

OK, ahora un DNS dinámico es como un tablero de mensajes donde pones tu IP y donde está asociado con un nombre como 82.76.231.55 se asocia con www.google.com . Ahora puedes utilizar un servicio de dns dinámico gratis aquí tienes una lista de proveedo
Torno madera Mini DIY casero prensa taladro contrapunto dinámico molino Metal eje ranurador del CNC de

Torno madera Mini DIY casero prensa taladro contrapunto dinámico molino Metal eje ranurador del CNC de

Torno madera Mini DIY casero prensa taladro contrapunto dinámico molino Metal eje el ranurador del CNCPaso 1: DIY X Y eje Deslice la mesa Paso 2: DIY Mini torno por aluminio Aloy BRICOLAJE torno Mini de aluminio AloyPaso 3: Bricolaje torneros y contr
Andador dinámico pasivo accionado

Andador dinámico pasivo accionado

Un robot andante es todavía un reto. Científico y los fabricantes propusieron robots basan en caminar estático (el centro de masas es siempre sobre el centro de presión), pero este tipo de marcha es muy lenta.Poca dinámica podría obtenerse utilizando
Construir un preamplificador de micrófono dinámico

Construir un preamplificador de micrófono dinámico

Hola chicos..!!Le invitamos a "Profesionales de la tecnología de Sam"Este proyecto es un preamplificador de micrófono dinámico que tiene muy buena ganancia. Y el sonido de salida cambiará la forma de su emisión o grabación.Esto es bueno para los
Caleidociclos: increíble papercraft dinámico

Caleidociclos: increíble papercraft dinámico

un proyecto de construcción de papel fácil, divertido y único.¿Qué es un caleidociclo?Un anillo tridimensional, compuesto por una serie de tetraedros enlazados (pirámides). Este diseño papercraft es única debido a su capacidad dinámica: el anillo es
Equilibrio dinámico Motor - Sugru y un iPhone!

Equilibrio dinámico Motor - Sugru y un iPhone!

Muchas tienda o máquinas herramientas tienen motores grandes y muchos grandes motores vibrar. En algunos casos se trata de algo bueno, pero generalmente no lo es. Motores de funcionamiento suave duran más, hacen menos ruido y en el caso de sierras u
Disco duro basado en soporte de micrófono dinámico para grabaciones de sonido HQ

Disco duro basado en soporte de micrófono dinámico para grabaciones de sonido HQ

narración micro disco duro basado en texto:había un micrófono dinámico en mi caja de chatarra, pero sin ningún soporte ni conexión de cable.ya que necesitaba un micrófono de alta calidad para mis proyectos explicar, así que tuve que pensar en unsopor
Equilibrio dinámico de la rueda con pistola Airsoft

Equilibrio dinámico de la rueda con pistola Airsoft

En primer lugar, im no el primero de ellos para hacer esto.Al principio estaba inspirado de un Ecomodder las pisadas de foro aquí. No estaba tan seguro porque el equilibrio dinámico de la rueda se utiliza sobre todo en grandes del neumático de carret
Libre servidor DNS dinámico con Esp8266 y OSD interfaz de Webcam FOSCAM

Libre servidor DNS dinámico con Esp8266 y OSD interfaz de Webcam FOSCAM

Hacer tu propio servidor de DDNS para acceder a sus casa dispositivos de internet, ningún servicio de pago es necesario!Control de cámaras Foscam desde su teléfono, con pantalla controles. Votar si te gusta!Esta configuración viene debajo de $10, y e
Bicicleta seguridad ayuda prototipo: de luz dinámico 3D

Bicicleta seguridad ayuda prototipo: de luz dinámico 3D

Se trata de un ible en un diseño de prototipo para una ayuda de seguridad para los ciclistas. Este diseño es solo un prototipo por lo que todos los detalles sobre los materiales y el proceso de construcción completo es solo una idea general. Particul
Cómo reducir la lesión mediante la realización de un calentamiento dinámico adecuado para arriba

Cómo reducir la lesión mediante la realización de un calentamiento dinámico adecuado para arriba

Nadie tiene planes de hacerse daño, pero lesiones con demasiada frecuencia son parte de un estilo de vida activo. No todas las lesiones se pueden evitar pero hay algunos pasos que puede tomar para reducir su riesgo de padecer daño aumentando también
Arduino DDNS (DNS dinámico) por abierto Electronics.org

Arduino DDNS (DNS dinámico) por abierto Electronics.org

este dispositivo captura la dirección IP de tu red y publicar en el sitio DynDNS.com. Todo ello sin PC. Permiten un acceso remoto a su incluso si LAN la dirección IP de los cambios de conexiones.Por razones de logística el proveedor no puede asignar