Programm mit GUI versehen

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Lou Cyphr3
User
Beiträge: 21
Registriert: Donnerstag 6. Juli 2017, 00:04

Programm mit GUI versehen

Beitragvon Lou Cyphr3 » Donnerstag 5. Oktober 2017, 22:04

Guten Abend,

ich habe mich gerade gefragt, wie ich eine GUI um ein Programm baue.
Als Anwendungsbeispiel:

Code: Alles auswählen

import time

print('" text1..."')
time.sleep(3)
print('text1')

a = input('')

if a == 'a':
    print('text3')


Muss ich jetzt eine seperate GUI schreiben, welche die Funktion abruft oder muss um die "Funktion" eine GUI geschrieben werden?

sincerly
Lou
Cours, camarade, le vieux monde est derrière toi!
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Re: Programm mit GUI versehen

Beitragvon Melewo » Freitag 6. Oktober 2017, 08:03

Dafür nicht, für andere kleine Tests von Codeschnipseln auch nicht. print() wird in einer GUI nicht verwendet, sleep sollte in einer GUI nicht verwendet werden und für input gibt es dann die entsprechenden Widgets mit Eingabefeldern. Eine GUI verwendest Du, wenn Du eine Anwendung schreiben möchtest, die aussehen soll wie eine Fensteranwendung.
Lou Cyphr3
User
Beiträge: 21
Registriert: Donnerstag 6. Juli 2017, 00:04

Re: Programm mit GUI versehen

Beitragvon Lou Cyphr3 » Freitag 6. Oktober 2017, 13:24

Okay, war von mir falsch formuliert. Ich dachte Graphic User Interface könnte auch ein Display sein. Wie auch immer jedenfalls
soll das alles in einem Fenster ablaufen. Ich hatte jetzt an Pygame gedacht, wobei mir immer noch nicht klar ist, wie ich den Text in das Display bekomme, wenn ich jetzt display initialisiere, bekomm ich quasi nur ein Display und der ganze printkram läuft nur in der Shell.

Kann mir wer auf die Sprünge helfen?
Cours, camarade, le vieux monde est derrière toi!
Benutzeravatar
__deets__
User
Beiträge: 1100
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Programm mit GUI versehen

Beitragvon __deets__ » Freitag 6. Oktober 2017, 13:39

Pygame kann text darstellen, ist aber alles etwas fummeliger als ein einfaches Print. Oder ein Label in einer GUI.

Wie waere es wenn du uns mal erzaehlst was du dir am Ende vorstellst, statt schon gleich mit Technologien einzusteigen, deren Eignung noch unklar ist.
Lou Cyphr3
User
Beiträge: 21
Registriert: Donnerstag 6. Juli 2017, 00:04

Re: Programm mit GUI versehen

Beitragvon Lou Cyphr3 » Freitag 6. Oktober 2017, 14:34

Es soll eine Art Textadventure werden, wo quasi Usereingaben essentiell sind.
Cours, camarade, le vieux monde est derrière toi!
Benutzeravatar
__deets__
User
Beiträge: 1100
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Programm mit GUI versehen

Beitragvon __deets__ » Freitag 6. Oktober 2017, 14:55

Wenn es ein reines Text Adventure sein soll, nimm das Terminal. Nicht umsonst laufen auch heute noch MUDs etc dort.

Wenn es noch bebildert werden soll, kommt es auf die Interaktion an. Wirklich Sätze eingeben? Nimm zB Tkinter & ein Texteingabefeld. Auswah von vorgegebenen Worten oder Fragen? Dann ist pygame ganz gut. Tkinter geht aber auch da.
Lou Cyphr3
User
Beiträge: 21
Registriert: Donnerstag 6. Juli 2017, 00:04

Re: Programm mit GUI versehen

Beitragvon Lou Cyphr3 » Sonntag 8. Oktober 2017, 03:45

Ja früher oder später ist bebildert schon auf dem plan.

ich hab mal ein pygame test gemacht mit inspiration aus dem Internet.
  1. [code]import pygame
  2. import sys
  3. import time
  4.  
  5. pygame.init()
  6.  
  7. cSec = 0
  8. cFrame = 0
  9. FPS = 0
  10.  
  11. fps_font = pygame.font.Font("/usr/local/share/fonts/Arial.ttf", 20)
  12.  
  13. def show_fps():
  14.     fps_overlay = fps.font.render((str(FPS), True, 0, 0, 0)
  15.     window.blit(fps_overlay, (0, 0)):
  16.  
  17. def create_window():
  18.     global window, window_height, window_width, window_title
  19.     window_width, window_height = 800, 600  
  20.     window_title = "The tale"
  21.     pygame.display.set_caption(window_title)
  22.     window = pygame.display.set_mode((window_width, window_height), pygame.HWSURFACE|pygame.DOUBLEBUF)
  23.    
  24.  
  25. def count_fps():
  26.     global cSec, cFrame, FPS
  27.  
  28.     if cSec == time.strftime("%S"):
  29.         cFrame += 1
  30.     else:
  31.         FPS = cFrame
  32.         cFrame = 0
  33.         cSec = time.straftime("%S")
  34.  
  35.  
  36. create_window()
  37.  
  38. isRunning = True
  39.  
  40. while isRunning:
  41.     for event in pygame.event.get():
  42.         if event.type == pygame.QUIT:
  43.             isRunning = False
  44.  
  45.     window.fill((255, 0, 255))
  46.  
  47.     show_fps()
  48.  
  49.    
  50.     pygame.display.update()
  51.  
  52. pygame.quit()
  53. sys.exit()
  54. [/code]




Dazu zwei Sachen:

1. Ich bin mir nicht sicher wie ich zu den "global" stehen soll.

2.
window.blit(fps_overlay, (0, 0)):
^
SyntaxError: invalid syntax
Cours, camarade, le vieux monde est derrière toi!
Sirius3
User
Beiträge: 6385
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Programm mit GUI versehen

Beitragvon Sirius3 » Sonntag 8. Oktober 2017, 08:53

global vermeidet man dadurch, dass man alles war zur Grafikausgabe gehört in einer Klasse definiert. Anweisungen werden nicht mit : abgeschlossen, daher der Syntaxfehler. Frames per second werden normalerweise über Zeit seit dem letzten Frame berechnet.
Lou Cyphr3
User
Beiträge: 21
Registriert: Donnerstag 6. Juli 2017, 00:04

Re: Programm mit GUI versehen

Beitragvon Lou Cyphr3 » Sonntag 8. Oktober 2017, 23:21

okay. was war nochmal der grund weshalb man globale vermeiden sollte?
den syntax fehler zeigt es mir auch ohne : an.

Code: Alles auswählen

 
   File "übung.py", line 15
    window.blit(fps_overlay, (0, 0))
         ^
SyntaxError: invalid syntax

Cours, camarade, le vieux monde est derrière toi!
Sirius3
User
Beiträge: 6385
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Programm mit GUI versehen

Beitragvon Sirius3 » Montag 9. Oktober 2017, 06:49

@Lou Cyphr3: weil da noch weitere Syntax-Fehler sind. Zähl mal die Klammern in der Zeile davor.

In Deinem Fall ist "global" unnötig, weil Du besser richtige Funktionen schreiben solltest, die auch Rückgabewerte haben.

Ohne "global" könnte das so aussehen (ungetestet):
  1. import pygame
  2. import sys
  3. import time
  4.  
  5. WINDOW_WIDTH = 800
  6. WINDOW_HEIGHT = 600
  7.  
  8. def show_fps(window, font, fps):
  9.     fps_overlay = font.render("{:.1f}".format(fps), True, 0, 0, 0)
  10.     window.blit(fps_overlay, (0, 0))
  11.  
  12. def create_window():
  13.     pygame.init()
  14.     pygame.display.set_caption("The tale")
  15.     return pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT), pygame.HWSURFACE|pygame.DOUBLEBUF)
  16.    
  17. def main():
  18.     window = create_window()
  19.     font = pygame.font.Font("/usr/local/share/fonts/Arial.ttf", 20)
  20.     last_time = 0
  21.  
  22.     while True:
  23.         current_time = time.time()
  24.         fps = 1 / (current_time - last_time)
  25.         last_time = current_time()
  26.        
  27.         for event in pygame.event.get():
  28.             if event.type == pygame.QUIT:
  29.                 break
  30.  
  31.         window.fill((255, 0, 255))
  32.         show_fps(window, font, fps)
  33.         pygame.display.update()
  34.  
  35.     pygame.quit()
  36.  
  37. if __name__ == '__main__':
  38.     main()

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder