文章目錄
- 前言
- 1.創建視窗
- 2.輸入框
- 3.構建Entry
- 4.左右及backspace
- 栗子
- 寫在最后
前言
之前看到過一篇不錯的文章,點個贊,
關于輸入框,pygame還是比較坑的,沒有內置,遂產生想法:tk和pg結合
1.創建視窗
tk嵌入pg請參考這,支持三個平臺,不用user32.dll只支持win32
import tkinter as tk
import pygame as pg
import os
root = tk.Tk()
os.environ["SDL_WINDOWID"] = str(root.winfo_id())
screen = pg.display.set_mode((400,300))#pg視窗大小
root.geometry("400x300")#tk視窗大小
2.輸入框
直接place可以,但由于pg太"慢",會出現打"abcdefg"出現"abdeg"等情況,遂使用threading,tk不可以在執行緒中更新,只能在thread中更新pg
import threading
def mainloop():
"pygame mainloop"
while 1:
for e in pg.event.get():
#some handle
pass
pg.display.update()
threading.Thread(target=mainloop,daemon=1).start()
必須守護執行緒
3.構建Entry
須注意entry的顏色
en = tk.Entry(font="SimHei 25",width=10,bg="black",fg="white",borderwidth=1,insertbackground="white",highlightbackground="white",relief="ridge")
en.place(x=200,y=0)
引數意思可以自己研究一下,在此省略
4.左右及backspace
這會被pg覆寫掉,這樣:
if e.type == pg.KEYDOWN:
if e.key == 8:
en.event_generate("<KeyPress>",keycode=e.key)
en.event_generate("<KeyPress>",keycode=e.key)
elif e.key == pg.K_LEFT:
en.event_generate("<KeyPress-Left>")
elif e.key == pg.K_RIGHT:
en.event_generate("<KeyPress-Right>")
栗子
import tkinter as tk
import pygame as pg
import threading
import os,sys,time
def mainloop():
while 1:
screen.fill((0,0,0))
screen.blit(font.render("請輸入姓名:",1,(255,255,255)),(0,0))
for e in pg.event.get():
if e.type == pg.QUIT:
#this is not a way
pass
elif e.type == pg.KEYDOWN:
if e.key == 8:
en.event_generate("<KeyPress>",keycode=e.key)
en.event_generate("<KeyPress>",keycode=e.key)
elif e.key == pg.K_LEFT:
en.event_generate("<KeyPress-Left>")
elif e.key == pg.K_RIGHT:
en.event_generate("<KeyPress-Right>")
screen.blit(font.render("名稱:"+en.get(),1,(255,255,255)),(0,100))
pg.display.update()
clock.tick(30)
root = tk.Tk()
os.environ["SDL_WINDOWID"] = str(root.winfo_id())
en = tk.Entry(font="SimHei 25",width=10,bg="black",fg="white",borderwidth=1,insertbackground="white",highlightbackground="white",relief="ridge")
en.place(x=200,y=0)
root.geometry("400x300")
pg.init()
screen = pg.display.set_mode((400,300))
font = pg.font.SysFont("SimHei",30)
clock = pg.time.Clock()
threading.Thread(target=mainloop,daemon=1).start()
root.mainloop()

寫在最后
須注意:1.title由tk視窗決定 2.pygame.QUIT將不起作用,可以用root.protocol解決
本文章發布于CSDN在2021.12.18 12:17
不要吝嗇你的贊!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/385409.html
標籤:其他
下一篇:猜字母游戲
