2013-07-03 5 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() 

Это был только я, дающий текстовому вводу текста tkinter выстрел в pygame. Я был уверен, что это не сработает правильно, но решил, что я попробую это, потому что мне нечего терять. Экран tkinter не отображается, пока вы не выходите из pygame. Итак, я не спрашиваю, знает ли кто-нибудь, как исправить код, но вместо этого, если кто-нибудь знает самый простой способ создать текстовое поле в pygame. Я знаю, что есть модуль текстового ввода, который можно импортировать. Если вы считаете, что это самый простой способ сделать это, вы можете пройти через меня. Если бы вы не смогли, сообщите мне, что вы считаете самым простым способом. Это небольшая программа, поэтому я хочу избежать множества тяжелых строк кода для простого текстового поля. Дайте мне знать, что вы, ребята, думаете. Большое спасибо.Использование текстовых входов в pygame

+0

На самом деле есть способ разместить отображение pygame внутри приложения tkinter, но это больше проблем, чем того стоит. В то время как я в конечном итоге сделал это, есть так много ошибок, которые произошли даже после того, как он работал нормально в течение нескольких секунд, что я сдался, и решил использовать EzText –

ответ

6

Я судимое с помощью Tk, но дело об использовании в это останавливает всю программу Pygame, когда окно Tk всплывает и его просто не хорошо

это то, что я использую его Pygame InputBox не самая красивая, но это работает большой просто скачать его и его очень проста в использовании

просто import inputbox

затем сделать что-то вроде этого:

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

это довольно много, как raw_input но Pygame

его не наиболее эстетично, но я уверен, если вы будете искать вокруг вы можете найти, может быть приятнее один

+0

Привет, Christian, я собирался использовать входной пакет первоначально, но я получаю сообщение об ошибке при запуске это .... AttributeError: объект 'module' не имеет атрибута 'join' ... где он говорит string.join.Я просмотрел код, и все кажется прекрасным, но я не полностью знаком со всем, что происходит в файле ввода-вывода py. Я использую python 3.3 и pygame 3.3, может быть, это проблема? Спасибо за ответ. –

+0

, так что это происходит при запуске файла входного файла или основного файла игры – Serial

+0

И то, и другое произошло, когда я запустил свой основной файл игры. Затем я запустил файл inputbox.py и получил ту же ошибку. Мне сказали, что многие старые функции были удалены из модуля «строка», но я не уверен, как бы это исправить. Я был удивлен, что оглядываясь по интернету, никто другой, похоже, не сталкивался с той же проблемой. Есть идеи? –

1

Я рекомендую использовать EzText. Это отличный способ добавить текстовые входы в свои программы pygame. Я лично использовал его сам, и это приятно и легко и работает с python 3.3.2.

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

1

Что касается того, что вы сказали об ошибке с InputBox, все, что вам нужно сделать найти и заменить везде он говорит (без кавычек) string.join(current_string,"") с "".join(current_string), так как я думаю, что это новое в питоне 3.4, во всяком случае, надеюсь, что это поможет.

2

Вы можете использовать небольшую библиотеку, которую я создаю, просто скачайте it и используйте ее.

Чтобы сделать простое текстовое поле попробовать:

from GUI import * 

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

Вы должны дать ему по крайней мере постион и размер Затем в входном контуре, обновить его:

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

и на конец, сделать его:

input_box.render(screen) 

Вы можете получить текст с input_box.text в в любой момент

Смежные вопросы