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

Đây chỉ là tôi cung cấp hộp nhập văn bản tkinter một shot trong pygame. Tôi khá chắc chắn nó sẽ không hoạt động đúng cách nhưng quyết định tôi sẽ thử nó dù sao tôi không có gì để mất. Màn hình tkinter không hiển thị cho đến khi bạn thoát khỏi trò đùa. Vì vậy, tôi không hỏi liệu có ai biết cách sửa mã, nhưng thay vào đó, nếu có ai biết cách đơn giản nhất để tạo một hộp văn bản trong pygame. Tôi biết có một mô-đun lớp textinput có thể được nhập khẩu. Nếu bạn tin rằng đó là cách dễ nhất để làm điều đó thì bạn có thể hướng dẫn tôi qua nó không. Nếu không bạn có thể vui lòng cho tôi biết những gì bạn nghĩ là cách dễ nhất. Đó là một chương trình nhỏ vì vậy tôi muốn tránh rất nhiều dòng mã nặng cho một hộp văn bản đơn giản. Hãy cho tôi biết mọi người nghĩ gì. Cảm ơn rất nhiều trước.Sử dụng đầu vào văn bản trong pygame

+0

Có thực sự là một cách để đặt một màn hình hiển thị pygame bên trong một ứng dụng tkinter, nhưng nó là cách rắc rối nhiều hơn nó là giá trị. Trong khi tôi đã làm điều này, có rất nhiều lỗi xảy ra ngay cả sau khi nó hoạt động tốt trong vài giây mà tôi đã từ bỏ và quyết định sử dụng EzText –

Trả lời

6

Tôi đã tryed sử dụng Tk nhưng điều về việc sử dụng được nó dừng chương trình toàn pygame khi cửa sổ Tk bật lên và nó không chỉ tốt

đây là những gì tôi sử dụng Pygame InputBox của nó không phải là đẹp nhất nhưng nó hoạt động lớn chỉ cần tải nó và nó thực sự dễ sử dụng

chỉ import inputbox

sau đó làm một cái gì đó như thế này:

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

này là khá nhiều như raw_input nhưng đối với pygame

không của nó thẩm mỹ nhất nhưng im chắc chắn nếu bạn tìm kiếm xung quanh bạn có thể tìm thấy có thể là một đẹp hơn một

+0

Hi Christian, tôi sẽ sử dụng inputbox ban đầu nhưng tôi gặp lỗi khi chạy nó .... AttributeError: đối tượng 'module' không có thuộc tính 'join' ... nơi nó nói string.join.Tôi đã xem xét các mã và tất cả có vẻ tốt nhưng tôi không hoàn toàn quen thuộc với tất cả mọi thứ đang xảy ra trong tập tin py inputbox. Tôi đang sử dụng python 3.3 và pygame 3.3, có thể đó là một vấn đề? Cảm ơn vi đa trả lơi. –

+0

do đó điều đó xảy ra khi bạn chạy tệp inputbox hoặc tệp trò chơi chính của bạn – Serial

+0

Cả hai, lỗi xảy ra khi tôi chạy tệp trò chơi chính của mình. Sau đó, tôi chạy tệp inputbox.py và nhận được lỗi tương tự. Tôi đã nói rằng rất nhiều chức năng cũ đã được gỡ bỏ tạo thành các mô-đun 'chuỗi', nhưng tôi không chắc chắn làm thế nào tôi sẽ sửa chữa nó. Tôi ngạc nhiên khi nhìn xung quanh trên internet, không ai khác dường như gặp phải vấn đề tương tự. Ý tưởng nào? –

1

tôi khuyên bạn nên sử dụng EzText. Đó là một cách tuyệt vời để thêm đầu vào văn bản vào các chương trình pygame của bạn. Cá nhân tôi đã tự mình sử dụng nó và nó là tốt đẹp và dễ dàng và làm việc với python 3.3.2.

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

1

Về những gì bạn nói về lỗi với InputBox, tất cả các bạn phải làm tìm và thay thế ở khắp mọi nơi nó nói (không có dấu ngoặc kép) string.join(current_string,"") với "".join(current_string), vì tôi nghĩ rằng đây là mới trong python 3.4, dù sao, hy vọng rằng sẽ giúp.

2

Bạn có thể sử dụng thư viện nhỏ mà tôi đang tạo, chỉ cần tải xuống it và sử dụng nó.

Để thực hiện đơn giản hộp chữ thử:

from GUI import * 

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

Bạn phải cung cấp cho nó ít nhất một vị trí và kích thước Sau đó, trong vòng lặp đầu vào của bạn, cập nhật nó:

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

đồng kết thúc, hiển thị:

input_box.render(screen) 

Bạn có thể nhận văn bản với input_box.text tại bất cứ lúc nào