Aplicación de horario para mí -- python campo con beginner campo con python-3.x campo con pyqt camp codereview Relacionados El problema

Timetable app for myself


4
vote

problema

Español

Mi objetivo fue construir un programa pequeño y simple que me mostraría el calendario de mi escuela para el día actual, así como el día siguiente. Soy nuevo en Pyqt (5) y programación en general. Comencé a programar hace unos 5 meses encendido y apagado al igual que un juego de diversión. Comencé con programas básicos basados ​​en texto que gradualmente obtuvieron más complejos y este es mi primer programa GUI (útil). ¿Alguna idea / sugerencia?

  import datetime import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QHBoxLayout, QApplication, QWidget, QLabel) from PyQt5.QtGui import (QIcon, QPixmap)  #My weekly school timetable Mon = ' 1       Spanish 2       Spanish 3       Music 4       Music 5       English Literature 6       English Literature 7       History 8       History' Tue = ' 1       Social Studies 2       Social Studies 3       Spanish 4       Spanish 5       Information Technology 6       Information Technology 7       English Literature 8       English Language' Wed = ' 1       English Literature 2       English Literature 3       Information Technology 4       Information Technology 5       HSB 6       HSB 7       Mathematics 8       Mathematics' Thu = ' 1       History 2       History 3       English Language 4       English Language 5       HSB 6       HSB 7       Mathematics 8       Mathematics' Fri = ' 1       Music 2       Music 3       English Language 4       English Language 5       Mathematics 6       Mathematics 7       Social Studies 8       Social Studies'  #Returns day in terms of Monday = 0, Tuesday = 1... day = datetime.datetime.today().weekday()  if day==0:     the_day = Mon     tomorrow = Tue if day==1:     the_day = Tue     tomorrow = Wed if day==2:     the_day = Wed     tomorrow = Thu if day==3:     the_day = Thu     tomorrow = Fri if day==4:     the_day = Fri     tomorrow = '' elif day==5 or day==6:     the_day = ''     tomorrow = Mon  if day in range(5):     today = '<b>Today's Timetable:<>'     next_day = '<b>Tomorrow's Timetable:<>' else:     today = ''     next_day = '<b>Monday's Timetable:<>'  class timetable(QWidget):                     def __init__(self):         super().__init__()          self.initUI()       def initUI(self):         if day==4:             lbl = QLabel(self)             pixmap = QPixmap('weekend.jpg')             smaller_pixmap = pixmap.scaled(160, 300, Qt.KeepAspectRatio, Qt.FastTransformation)             lbl.setPixmap(smaller_pixmap)             lbl.move(-3, 162)             lbl.show()          elif day==5 or day==6:             lbl = QLabel(self)             pixmap = QPixmap('weekend.jpg')             smaller_pixmap = pixmap.scaled(160, 300, Qt.KeepAspectRatio, Qt.FastTransformation)             lbl.setPixmap(smaller_pixmap)             lbl.move(-3, 0)             lbl.show()                      title0 = QLabel(today, self)         title0.move(5,5)            schedule0 = QLabel(the_day, self)         schedule0.move(5, 16)          title1 = QLabel(next_day, self)         title1.move(5,150)          schedule1 = QLabel(tomorrow, self)         schedule1.move(5, 160)          self.setGeometry(7, 30, 150, 287)         self.setFixedSize(self.size())         self.setWindowTitle('Timetable')         self.setWindowIcon(QIcon('icon.png'))               self.show()     if __name__ == '__main__':      app = QApplication(sys.argv)     ex = timetable()     ex.show()     sys.exit(app.exec_())       #created with PyQt5 using Python 3.5   
Original en ingles

My aim was to build a small, simple program that would show me my school timetable for the present day as well as the following day. I am new to PyQt(5) and programming in general. I started programming about 5 months ago on and off just as a fun side hobby. I started with basic text-based programs which gradually got more complex and this is my first (useful) GUI program. Any thoughts/suggestions?

import datetime import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QHBoxLayout, QApplication, QWidget, QLabel) from PyQt5.QtGui import (QIcon, QPixmap)  #My weekly school timetable Mon = '\n1       Spanish\n2       Spanish\n3       Music\n4       Music\n5       English Literature\n6       English Literature\n7       History\n8       History' Tue = '\n1       Social Studies\n2       Social Studies\n3       Spanish\n4       Spanish\n5       Information Technology\n6       Information Technology\n7       English Literature\n8       English Language' Wed = '\n1       English Literature\n2       English Literature\n3       Information Technology\n4       Information Technology\n5       HSB\n6       HSB\n7       Mathematics\n8       Mathematics' Thu = '\n1       History\n2       History\n3       English Language\n4       English Language\n5       HSB\n6       HSB\n7       Mathematics\n8       Mathematics' Fri = '\n1       Music\n2       Music\n3       English Language\n4       English Language\n5       Mathematics\n6       Mathematics\n7       Social Studies\n8       Social Studies'  #Returns day in terms of Monday = 0, Tuesday = 1... day = datetime.datetime.today().weekday()  if day==0:     the_day = Mon     tomorrow = Tue if day==1:     the_day = Tue     tomorrow = Wed if day==2:     the_day = Wed     tomorrow = Thu if day==3:     the_day = Thu     tomorrow = Fri if day==4:     the_day = Fri     tomorrow = '' elif day==5 or day==6:     the_day = ''     tomorrow = Mon  if day in range(5):     today = '<b>Today\'s Timetable:<\b>'     next_day = '<b>Tomorrow\'s Timetable:<\b>' else:     today = ''     next_day = '<b>Monday\'s Timetable:<\b>'  class timetable(QWidget):                     def __init__(self):         super().__init__()          self.initUI()       def initUI(self):         if day==4:             lbl = QLabel(self)             pixmap = QPixmap('weekend.jpg')             smaller_pixmap = pixmap.scaled(160, 300, Qt.KeepAspectRatio, Qt.FastTransformation)             lbl.setPixmap(smaller_pixmap)             lbl.move(-3, 162)             lbl.show()          elif day==5 or day==6:             lbl = QLabel(self)             pixmap = QPixmap('weekend.jpg')             smaller_pixmap = pixmap.scaled(160, 300, Qt.KeepAspectRatio, Qt.FastTransformation)             lbl.setPixmap(smaller_pixmap)             lbl.move(-3, 0)             lbl.show()                      title0 = QLabel(today, self)         title0.move(5,5)            schedule0 = QLabel(the_day, self)         schedule0.move(5, 16)          title1 = QLabel(next_day, self)         title1.move(5,150)          schedule1 = QLabel(tomorrow, self)         schedule1.move(5, 160)          self.setGeometry(7, 30, 150, 287)         self.setFixedSize(self.size())         self.setWindowTitle('Timetable')         self.setWindowIcon(QIcon('icon.png'))               self.show()     if __name__ == '__main__':      app = QApplication(sys.argv)     ex = timetable()     ex.show()     sys.exit(app.exec_())       #created with PyQt5 using Python 3.5 
           
     
     

Lista de respuestas

3
 
vote
vote
La mejor respuesta
 

Cambiaría su código de configuración para tomar una lista de listas, donde las listas interiores son listas de sujetos en ese día y la lista exterior recopila todas estas listas:

  limitToRange7  

Esto podría ser movido en la clase, lo que podría simplemente tomar el 998877766655443318 99887766555443319 como parámetros (lo que sería mucho más fácil ejecutar esto, por ejemplo, para Dos horarios diferentes):

  limitedData0  

Tenga en cuenta que también cambió de nombre de algunas de sus variables (ahora hay un 998877766555443321 y un limitedData2 y un limitedData3 y limitedData4 .

 

I would change your setup code to take a list of lists, where the inner lists are lists of subjects on that day and the outer list collects all these lists:

schedule = [['Spanish', 'Spanish', 'Music', 'Music', 'English Literature', 'English Literature', 'History', 'History'],             ...]  def format_day(day_schedule):     return "\n" + "\n".join("{}       {}".format(i, subject)                             for i, subject in enumerate(day_schedule, 1))  today = date.datetime.today().weekday()  try:     the_day = format_day(schedule[today]) except IndexError:     the_day = '' try:     tomorrow = format_day(schedule[today + 1]) except IndexError:     tomorrow = format_day(schedule[0]) 

This could actually be moved into the class, which could just take the schedule and day as parameters (which would make it a lot easier to run this, e.g for two different schedules):

import datetime import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QHBoxLayout, QApplication, QWidget, QLabel) from PyQt5.QtGui import (QIcon, QPixmap)   def format_day(day_schedule):     return "\n" + "\n".join("{}       {}".format(i, subject)                             for i, subject in enumerate(day_schedule, 1))   class Timetable(QWidget):                     def __init__(self, schedule, day):         super().__init__()         self.schedule = schedule         self.day = day         self.init_UI()       def init_UI(self):         try:             today = format_day(self.schedule[self.day])         except IndexError:             today = ''         try:             tomorrow = format_day(self.schedule[self.day + 1])         except IndexError:             tomorrow = format_day(self.schedule[0])          if self.day <= 5:             today_header = '<b>Today\'s Timetable:<\b>'             tomorrow_header = '<b>Tomorrow\'s Timetable:<\b>'         else:             today_header = ''             tomorrow_header = '<b>Monday\'s Timetable:<\b>'          if self.day in (4, 5, 6):             lbl = QLabel(self)             pixmap = QPixmap('weekend.jpg')             smaller_pixmap = pixmap.scaled(160, 300, Qt.KeepAspectRatio, Qt.FastTransformation)             lbl.setPixmap(smaller_pixmap)             if self.day == 4:                 lbl.move(-3, 162)             else:                 lbl.move(-3, 0)             lbl.show()                title0 = QLabel(today_header, self)         title0.move(5, 5)         schedule0 = QLabel(today, self)         schedule0.move(5, 16)          title1 = QLabel(tomorrow_header, self)         title1.move(5, 150)         schedule1 = QLabel(tomorrow, self)         schedule1.move(5, 160)          self.setGeometry(7, 30, 150, 287)         self.setFixedSize(self.size())         self.setWindowTitle('Timetable')         self.setWindowIcon(QIcon('icon.png'))               self.show()   if __name__ == '__main__':     app = QApplication(sys.argv)      schedule = [['Spanish', 'Spanish', 'Music', 'Music', 'English Literature', 'English Literature', 'History', 'History'],                 ...]     today = date.datetime.today().weekday()     ex = Timetable(schedule, today)     ex.show()     sys.exit(app.exec_())     #created with PyQt5 using Python 3.5 

Note that I also renamed some of your variables (there is now a today and a today_header and a tomorrow and tomorrow_header.

 
 
2
 
vote

Mientras que la respuesta de @ Graipher es mucho mejor y más completa, simplemente pensé que señalaba una solución sin clase para iterar a través de tus días. Si define una lista de días, puede elegir variables hoy y mañana desde list_of_days[index] y list_of_days[index+1] proporcionó que rompa el bucle antes de que el índice llegue al último elemento. De esta manera, no necesita especificar hoy y mañana para cada condición if .

 

While @Graipher's answer is much better and more thorough, I just thought I'd point out a non-class solution to iterate through your days. If you define a list of days, you can pick variables today and tomorrow from list_of_days[index] and list_of_days[index+1] provided that you break the loop before the index reaches the last element. This way, you don't need to specify today and tomorrow for each if condition.

 
 

Relacionados problema

3  Planificador de proyectos simples en PYQT5  ( Simple projects planner on pyqt5 ) 
Mi tarea fue: Crear una aplicación Python para mostrar el estado activo de su proyecto de TI. Todos los proyectos tienen su propio número único que se genera ...

1  Alternativa al uso del sueño () para evitar una condición de carrera en Pyqt  ( Alternative to using sleep to avoid a race condition in pyqt ) 
Tengo una situación en la que me gustaría usar un solo 9988776665544330 para ejecutar dos (o más) métodos separados en diferentes momentos. Por ejemplo, me ...

8  My Hangman Game creó usando Pyqt5 y Python 3.5  ( My hangman game created using pyqt5 and python 3 5 ) 
Este es mi juego de Hangman que creé con Pyqt5 y Python 3.5 en mi máquina Windows 7. ¿Qué piensas? ¿Hay algo en lo que pueda cambiar / mejorar en términos de ...

2  PYQT5 - Abra la ventana de nueva imagen para cada botón, haga clic en Menú  ( Pyqt5 open new image window for each button click in menu ) 
Quería escribir un código que cada vez que presionara un botón en mi menú, se creará una matriz de imágenes adorables, y esta imagen aparecerá en una nueva ve...

0  Configurador de widgets [cerrado]  ( Widget configurer ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

6  Poner millones de artículos en un QTeeView  ( Putting millions of items in a qtreeview ) 
Tengo una lista de 2,888,991 objetos de canal. Cada objeto tiene un nombre y una frecuencia de muestra. Estoy tratando de ponerlos en un QTeeView. Cada nombre...

5  Vinculando un valor a un control  ( Binding a value to a control ) 
Actualmente estoy escribiendo algún código en PYQT4 que toma un valor y un control y une el valor al control. Una vez que el usuario guarda el formulario, des...

7  Creando un objeto en Python con muchos argumentos largos [cerrados]  ( Creating an object in python with lots of long arguments ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

7  Primer juego de memoria con PYQT y OOP  ( First memory game with pyqt and oop ) 
Así que esta es mi primera vez en este sitio. He escrito este código de Python básico con PYQT5 para crear un juego de memoria. Como no estoy muy familiarizad...

2  Subir un archivo de entrada a un servidor web  ( Uploading an input file to a web server ) 
Tengo una tarea larga que procesa un archivo de entrada y luego la carga a un servidor web. La parte de procesamiento se puede interrumpir (con la limpieza), ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos