最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pygame實(shí)現(xiàn)中文輸入框的示例

 更新時間:2021年12月03日 10:49:12   作者:狡猾的皮球  
本文主要介紹了pygame實(shí)現(xiàn)中文輸入框的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

注意:

pygame2.0已經(jīng)支持輸入法了,本文的方法僅供參考

為了解決pygame不能輸入中文的問題,就寫了一個中文輸入框

1.效果

2.源碼

以下代碼需要安裝:

pip install Pinyin2Hanzi

然后就可以直接運(yùn)行啦

注意:你電腦里如果沒有microsoftyaheimicrosoftyaheiui字體的話,請自行找一個中文字體

import string
 
import pygame
from Pinyin2Hanzi import DefaultDagParams
from Pinyin2Hanzi import dag
 
 
class TextBox:
    def __init__(self, w, h, x, y, font=None, callback=None):
        """
        :param w:文本框?qū)挾?
        :param h:文本框高度
        :param x:文本框坐標(biāo)
        :param y:文本框坐標(biāo)
        :param font:文本框中使用的字體
        :param callback:在文本框按下回車鍵之后的回調(diào)函數(shù)
        """
        self.width = w
        self.height = h
        self.x = x
        self.y = y
        self.text = ""  # 文本框內(nèi)容
        self.callback = callback
        # 創(chuàng)建背景surface
        self.__surface = pygame.Surface((w, h))
        # 如果font為None,那么效果可能不太好,建議傳入font,更好調(diào)節(jié)
        if font is None:
            self.font = pygame.font.SysFont('microsoftyaheimicrosoftyaheiui', 16)
        else:
            self.font = font
 
        self.dagparams = DefaultDagParams()
        self.state = 0  # 0初始狀態(tài) 1輸入拼音狀態(tài)
        self.page = 1  # 第幾頁
        self.limit = 5  # 顯示幾個漢字
        self.pinyin = ''
        self.word_list = []  # 候選詞列表
        self.word_list_surf = None  # 候選詞surface
        self.buffer_text = ''  # 聯(lián)想緩沖區(qū)字符串
 
    def create_word_list_surf(self):
        """
        創(chuàng)建聯(lián)想詞surface
        """
        word_list = [str(index + 1) + '.' + word for index, word in enumerate(self.word_list)]
        text = " ".join(word_list)
        self.word_list_surf = self.font.render(text, True, (255, 255, 255))
 
    def draw(self, dest_surf):
        # 創(chuàng)建文字surf
        text_surf = self.font.render(self.text, True, (255, 255, 255))
        # 繪制背景色
        dest_surf.blit(self.__surface, (self.x, self.y))
        # 繪制文字
        dest_surf.blit(text_surf, (self.x, self.y + (self.height - text_surf.get_height())),
                       (0, 0, self.width, self.height))
        # 繪制聯(lián)想詞
        if self.state == 1:
            dest_surf.blit(self.word_list_surf,
                           (self.x, self.y + (self.height - text_surf.get_height()) - 30),
                           (0, 0, self.width, self.height)
                           )
 
    def key_down(self, event):
        unicode = event.unicode
        key = event.key
 
        # 退位鍵
        if key == 8:
            self.text = self.text[:-1]
            if self.state == 1:
                self.buffer_text = self.buffer_text[:-1]
            return
 
        # 切換大小寫鍵
        if key == 301:
            return
 
        # 回車鍵
        if key == 13:
            if self.callback:
                self.callback(self.text)
            return
 
        # print(key)
        # 空格輸入中文
        if self.state == 1 and key == 32:
            self.state = 0
            self.text = self.text[:-len(self.buffer_text)] + self.word_list[0]
            self.word_list = []
            self.buffer_text = ''
            self.page = 1
            return
 
        # 翻頁
        if self.state == 1 and key == 61:
            self.page += 1
            self.word_list = self.py2hz(self.buffer_text)
            if len(self.word_list) == 0:
                self.page -= 1
                self.word_list = self.py2hz(self.buffer_text)
            self.create_word_list_surf()
            return
 
        # 回退
        if self.state == 1 and key == 45:
            self.page -= 1
            if self.page < 1:
                self.page = 1
            self.word_list = self.py2hz(self.buffer_text)
            self.create_word_list_surf()
            return
 
        # 選字
        if self.state == 1 and key in (49, 50, 51, 52, 53):
            self.state = 0
            if len(self.word_list) <= key - 49:
                return
            self.text = self.text[:-len(self.buffer_text)] + self.word_list[key - 49]
            self.word_list = []
            self.buffer_text = ''
            self.page = 1
            return
 
        if unicode != "":
            char = unicode
        else:
            char = chr(key)
 
        if char in string.ascii_letters:
            self.buffer_text += char
            self.word_list = self.py2hz(self.buffer_text)
            self.create_word_list_surf()
            # print(self.buffer_text)
            self.state = 1
        self.text += char
 
    def safe_key_down(self, event):
        try:
            self.key_down(event)
        except:
            self.reset()
 
    def py2hz(self, pinyin):
        result = dag(self.dagparams, (pinyin,), path_num=self.limit * self.page)[
                 (self.page - 1) * self.limit:self.page * self.limit]
        data = [item.path[0] for item in result]
        return data
 
    def reset(self):
        # 異常的時候還原到初始狀態(tài)
        self.state = 0  # 0初始狀態(tài) 1輸入拼音狀態(tài)
        self.page = 1  # 第幾頁
        self.limit = 5  # 顯示幾個漢字
        self.pinyin = ''
        self.word_list = []  # 候選詞列表
        self.word_list_surf = None  # 候選詞surface
        self.buffer_text = ''  # 聯(lián)想緩沖區(qū)字符串
 
 
def callback(text):
    print("回車測試", text)
 
 
def main():
    # 英文文本框demo
    pygame.init()
    winSur = pygame.display.set_mode((640, 480))
    # 創(chuàng)建文本框
    text_box = TextBox(200, 30, 200, 200, callback=callback)
 
    # 游戲主循環(huán)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()
            elif event.type == pygame.KEYDOWN:
                # 調(diào)用文本框鍵盤按下事件
                text_box.safe_key_down(event)
        pygame.time.delay(33)
        winSur.fill((0, 50, 0))
        # 繪制文本框
        text_box.draw(winSur)
        pygame.display.flip()
 
 
if __name__ == '__main__':
    main()

3.用法

用法很簡單

1.創(chuàng)建一個TextBox對象

TextBox參數(shù)說明:

  • w:輸入框的寬
  • h:輸入框的高
  • x:輸入框左上角x坐標(biāo)
  • y:輸入框左上角y坐標(biāo)
  • font:字體(可以不傳)
  • callback:按下回車之后的回調(diào)函數(shù),這個函數(shù)必須有一個參數(shù)用來接收文本框中的字符串

2.在鍵盤按下事件時調(diào)用TextBox對象的safe_key_down(event)方法,記住要把pygame的event傳進(jìn)去

3.記得調(diào)用TextBox的draw(surface)方法,顯示輸入框

到此這篇關(guān)于pygame實(shí)現(xiàn)中文輸入框的示例的文章就介紹到這了,更多相關(guān)pygame 中文輸入框內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解django中視圖函數(shù)的FBV和CBV

    詳解django中視圖函數(shù)的FBV和CBV

    FBV是指視圖函數(shù)以普通函數(shù)的形式,CBV是指視圖函數(shù)以類的方式,這篇文章主要介紹了django中視圖函數(shù)的FBV和CBV,需要的朋友可以參考下
    2022-08-08
  • 如何在Python中引用其他模塊

    如何在Python中引用其他模塊

    這篇文章主要介紹了如何在Python中引用其他模塊,在Python中,除了可以自定義模塊外,還可以引用其他模塊,主要包括使用標(biāo)準(zhǔn)庫和第三方模塊,下面文章分別詳細(xì)的介紹,需要的小伙伴可以參考一下
    2022-06-06
  • 低版本中Python除法運(yùn)算小技巧

    低版本中Python除法運(yùn)算小技巧

    這篇文章主要介紹了低版本中Python除法運(yùn)算小技巧,python 2.5版本中存在兩種除法運(yùn)算,即所謂的true除法和floor除法,本文講解了兩種方法的使用技巧,需要的朋友可以參考下
    2015-04-04
  • Python Flask利用SocketIO庫實(shí)現(xiàn)圖表的繪制

    Python Flask利用SocketIO庫實(shí)現(xiàn)圖表的繪制

    這篇文章主要為大家詳細(xì)介紹了Python Flask框架如何利用SocketIO庫實(shí)現(xiàn)圖表的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • Python 字符串去除空格的五種方法

    Python 字符串去除空格的五種方法

    這篇文章主要介紹了Python 字符串去除空格的五種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python openpyxl 插入折線圖實(shí)例

    Python openpyxl 插入折線圖實(shí)例

    這篇文章主要介紹了Python openpyxl 插入折線圖實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python使用回溯法子集樹模板解決迷宮問題示例

    Python使用回溯法子集樹模板解決迷宮問題示例

    這篇文章主要介紹了Python使用回溯法解決迷宮問題,簡單講述了迷宮問題的原理并結(jié)合實(shí)例形式分析了Python基于回溯法子集樹模板解決迷宮問題的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • 基于Python做一個簡單的動圖生成器

    基于Python做一個簡單的動圖生成器

    現(xiàn)在的年輕人都開始每天保溫杯里泡枸杞,這怎么能行呢?于是懷揣著愉悅心情的想法,我開始制作GIF動圖生成器,這個小工具制作的目的是為了將多張圖片組合后生成一張動態(tài)的GIF圖片,感興趣的可以嘗試一下
    2023-01-01
  • 詳解python 支持向量機(jī)(SVM)算法

    詳解python 支持向量機(jī)(SVM)算法

    這篇文章主要介紹了python SVM算法的相關(guān)資料,幫助大家更好的利用python進(jìn)行數(shù)據(jù)分析,感興趣的朋友可以了解下
    2020-09-09
  • Python實(shí)現(xiàn)控制臺中的進(jìn)度條功能代碼

    Python實(shí)現(xiàn)控制臺中的進(jìn)度條功能代碼

    下面小編就為大家分享一篇Python實(shí)現(xiàn)控制臺中的進(jìn)度條功能代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12

最新評論

宜君县| 鱼台县| 偏关县| 旌德县| 台北市| 阿巴嘎旗| 青冈县| 西青区| 闻喜县| 木兰县| 承德市| 永昌县| 铜梁县| 泰兴市| 温宿县| 龙陵县| 中牟县| 滦平县| 昌图县| 同心县| 孟州市| 玉门市| 芦溪县| 义马市| 武强县| 高碑店市| 乌兰浩特市| 通河县| 牙克石市| 平潭县| 清远市| 新竹市| 临泽县| 兴和县| 张家口市| 巍山| 济宁市| 肇源县| 龙口市| 凤城市| 汉中市|