2013-07-03 7 views
5
import tkinter as tk  
import pygame 

pygame.init() 
ss = width, height = 1024, 600 
screen = pygame.display.set_mode(ss) 
tkinput_1 = True  

while True: 

    event = pygame.event.poll() 
    keys = pygame.key.get_pressed() 

    if event.type == pygame.QUIT: 
     pygame.quit() 
     sys.exit() 

    screen.fill((0,0,0)) 

    if tkinput_1 == True: 
     tkinput_root1 = tk.Tk() 
     tkinput_root1.geometry("200x200") 
     tkinput_root1.title("How many teams?") 
     tkinput_input1 = tk.Entry(tkinput_root1) 
     tkinput_1 = False 

    pygame.display.update() 

tkinput_root1.mainloop() 

Dies war nur ich geben die tkinter Texteingabefeld einen Schuss in Pygame. Ich war mir ziemlich sicher, dass es nicht gut gehen würde, entschied aber, dass ich es trotzdem versuchen würde, weil ich nichts zu verlieren hatte. Der tkinter-Bildschirm wird erst angezeigt, wenn Sie pygame verlassen haben. Also ich frage nicht, ob jemand weiß, wie man den Code repariert, sondern stattdessen, wenn jemand die einfachste Möglichkeit zum Erstellen eines Textfelds in Pygame kennt. Ich weiß, dass es ein Texteingabe-Klassenmodul gibt, das importiert werden kann. Wenn Sie glauben, dass dies der einfachste Weg ist, dann können Sie mich durchgehen. Wenn nicht, lass mich bitte wissen, was du denkst, ist der einfachste Weg. Es ist ein kleines Programm, also möchte ich viele schwere Codezeilen für eine einfache Textbox vermeiden. Lass mich wissen, was ihr denkt. Vielen Dank im Voraus.Verwenden von Texteingaben in pygame

+0

Es gibt tatsächlich eine Möglichkeit, ein Pygame-Display in eine Tkinter-App zu setzen, aber es ist viel mehr Mühe als es wert ist. Während ich das tat, gibt es so viele Fehler, die passierten, auch nachdem es für ein paar Sekunden in Ordnung war. Ich gab EzText auf –

Antwort

6

Ich habe mit Tk tryed aber die Sache über die Verwendung ist es stoppt das ganze pygame Programm, wenn die Tk-Fenster sich öffnet und es ist nicht gut, nur

das ist, was ich Pygame InputBox seine Verwendung nicht die schönste, aber es funktioniert groß laden sie es einfach und es ist wirklich einfach

nur import inputbox

dann tun, so etwas zu verwenden:

inp = int(inputbox.ask(screen, 'Message')) #inp will equal whatever the input is 

dies ziemlich viel wie raw_input ist aber für pygame

seine nicht die ästhetisch ansprechend, aber ich bin sicher, wenn Sie suchen, um Sie vielleicht ein schöneres

+0

Hallo Christian, ich wollte ursprünglich das Eingabefeld verwenden, aber beim Ausführen bekomme ich einen Fehler it .... AttributeError: 'Modul' Objekt hat kein Attribut 'Join' ... wo es String.join heißt.Ich habe den Code durchgesehen und alles scheint in Ordnung zu sein, aber ich bin nicht vollständig mit allem vertraut, was in der py-Eingabedatei passiert. Ich benutze Python 3.3 und Pygame 3.3, könnte das ein Problem sein? Danke für die Antwort. –

+0

so passiert, wenn Sie die Eingabedatei oder youre Hauptspiel Datei ausführen – Serial

+0

Beide trat der Fehler auf, wenn ich meine Hauptspieldatei lief. Ich habe dann die Datei inputbox.py ausgeführt und den gleichen Fehler erhalten. Mir wurde gesagt, dass viele alte Funktionen aus dem "String" -Modul entfernt wurden, aber ich bin mir nicht sicher, wie ich das beheben würde. Ich war überrascht, dass sich im Internet niemand anderes mit dem gleichen Problem konfrontiert sah. Irgendwelche Ideen? –

1

ich EzText empfehlen finden. Es ist eine großartige Möglichkeit, Texteingaben in Ihre Pygame-Programme hinzuzufügen. Ich habe es selbst benutzt und es ist schön und einfach und funktioniert mit Python 3.3.2.

http://www.pygame.org/project-EzText-920-.html

1

In Bezug auf was Sie mit InputBox über den Fehler sagte, alles, was Sie überall haben zu finden und ersetzen Sie es sagt (ohne die Anführungszeichen) string.join(current_string,"") mit "".join(current_string), da ich denke, das 3.4 in Python neu ist, Wie auch immer, hoffe das hilft.

2

Sie können eine kleine Bibliothek, die ich mache, verwenden, laden Sie einfach it und verwenden Sie es.

Um ein einfaches Textfeld Versuch zu machen:

from GUI import * 

input_bow = InLineTextBox((0, 0), 200) 

Sie müssen es mindestens eine Postion geben und die Größe dann in Ihrem Eingangsschleife, aktualisieren:

for e in pygame.event.get(): 
    input_box.update(e) 

und bei der Ende, machen es:

input_box.render(screen) 

Sie den Text erhalten können mit input_box.text an Jeder Moment