updateing

This commit is contained in:
shenjackyuanjie 2021-12-05 23:37:49 +08:00
parent 26d0a1e821
commit 4476d79a60
4 changed files with 35 additions and 13 deletions

View File

@ -6,8 +6,6 @@ import os
import sys import sys
import cProfile import cProfile
import traceback import traceback
import threading
import multiprocessing
# TODO 默认位置配置文件 # TODO 默认位置配置文件
# TODO 可自定义工作路径 # TODO 可自定义工作路径

View File

@ -29,9 +29,10 @@ if __name__ == '__main__': # been start will not run this
import translate import translate
from Difficult_Rocket.api.Exp import * from Difficult_Rocket.api.Exp import *
from Difficult_Rocket.fps.fps_log import FpsLogger
from Difficult_Rocket.translate import tr from Difficult_Rocket.translate import tr
from Difficult_Rocket.command import line from Difficult_Rocket.command import line
from Difficult_Rocket.fps.fps_log import FpsLogger
from Difficult_Rocket.guis.widgets import InputBox
from Difficult_Rocket.api import tools, new_thread from Difficult_Rocket.api import tools, new_thread
# libs function # libs function
@ -123,6 +124,10 @@ class ClientWindow(Window):
self.push_handlers(self.command) self.push_handlers(self.command)
self.command.set_handler('on_command', self.on_command) self.command.set_handler('on_command', self.on_command)
self.command.set_handler('on_message', self.on_message) self.command.set_handler('on_message', self.on_message)
self.input_box = InputBox(x=50, y=30, width=300, height=20,
batch=self.label_batch) # 实例化
self.push_handlers(self.input_box)
self.input_box.enabled = True
# fps显示 # fps显示
self.fps_label = pyglet.text.Label(x=10, y=self.height - 10, self.fps_label = pyglet.text.Label(x=10, y=self.height - 10,
width=self.width - 20, height=20, width=self.width - 20, height=20,
@ -269,6 +274,8 @@ class ClientWindow(Window):
self.logger.debug(tr.lang('window', 'text.new_line')) self.logger.debug(tr.lang('window', 'text.new_line'))
else: else:
self.logger.debug(tr.lang('window', 'text.input').format(text)) self.logger.debug(tr.lang('window', 'text.input').format(text))
if text == 't':
self.input_box.enabled = True
def on_text_motion(self, motion): def on_text_motion(self, motion):
motion_string = key.motion_string(motion) motion_string = key.motion_string(motion)

View File

@ -20,10 +20,10 @@ from decimal import Decimal
# from DR # from DR
from Difficult_Rocket import translate from Difficult_Rocket import translate
from Difficult_Rocket.api import new_thread from Difficult_Rocket.api import new_thread
from Difficult_Rocket.guis.widgets import InputBox
# from libs.pyglet # from libs.pyglet
from libs import pyglet from libs import pyglet
from libs.pyglet import font
from libs.pyglet.text import Label from libs.pyglet.text import Label
from libs.pyglet.window import key from libs.pyglet.window import key
from libs.pyglet.gui import widgets from libs.pyglet.gui import widgets

View File

@ -14,6 +14,7 @@ gitee: @shenjackyuanjie
from Difficult_Rocket import translate from Difficult_Rocket import translate
# from libs import pyglet # from libs import pyglet
from libs import pyglet
from libs.pyglet import font from libs.pyglet import font
from libs.pyglet.text import Label from libs.pyglet.text import Label
from libs.pyglet.window import key from libs.pyglet.window import key
@ -68,10 +69,11 @@ class InputBox(widgets.WidgetBase):
batch: Batch = Batch(), batch: Batch = Batch(),
group: Group = Group()): group: Group = Group()):
super().__init__(x, y, width, height) super().__init__(x, y, width, height)
self.enabled = False
self._text = message self._text = message
self._cursor_poi = 0 self._cursor_poi = 0
self.font = font.load(name=font_name, size=font_size, self.font = font.load(name=font_name, size=font_size,
blod=font_bold, italic=font_italic, stretch=font_stretch, bold=font_bold, italic=font_italic, stretch=font_stretch,
dpi=font_dpi) dpi=font_dpi)
self.font_height = self.font.ascent - self.font.descent self.font_height = self.font.ascent - self.font.descent
self.out_bound = out_line self.out_bound = out_line
@ -120,6 +122,10 @@ class InputBox(widgets.WidgetBase):
def cursor_poi(self, value) -> None: def cursor_poi(self, value) -> None:
assert type(value) is int, 'Input Box\'s cursor poi must be int!' assert type(value) is int, 'Input Box\'s cursor poi must be int!'
self._cursor_poi = value self._cursor_poi = value
add_x = self.x + self.out_bound
for glyph in self.font.get_glyphs(self.text[:value]):
add_x += glyph.width
self._光标.x = add_x
# 渲染时属性 # 渲染时属性
@property @property
@ -148,7 +154,6 @@ class InputBox(widgets.WidgetBase):
self._选择框.visible = value self._选择框.visible = value
self._光标.visible = value self._光标.visible = value
@property @property
def value(self) -> str: def value(self) -> str:
return self._text return self._text
@ -170,6 +175,7 @@ class InputBox(widgets.WidgetBase):
self.dispatch_event('on_commit', self.text) self.dispatch_event('on_commit', self.text)
else: else:
self.text = f'{self.text[:self.cursor_poi]}{text}{self.text[self.cursor_poi:]}' self.text = f'{self.text[:self.cursor_poi]}{text}{self.text[self.cursor_poi:]}'
self.cursor_poi += len(text)
# 移动光标 # 移动光标
def on_text_motion(self, motion): def on_text_motion(self, motion):
@ -185,13 +191,21 @@ class InputBox(widgets.WidgetBase):
self.cursor_poi = 0 self.cursor_poi = 0
elif motion in (key.MOTION_END_OF_LINE, key.MOTION_END_OF_FILE, key.MOTION_NEXT_PAGE): # 结尾 elif motion in (key.MOTION_END_OF_LINE, key.MOTION_END_OF_FILE, key.MOTION_NEXT_PAGE): # 结尾
self.cursor_poi = len(self.text) self.cursor_poi = len(self.text)
# 删除操作
def on_key_press(self, symbol, modifiers): elif motion == key.MOTION_BACKSPACE:
# 在这加一个on_key_press纯属为了处理剪贴板操作 if self.text: # 如果有文字
# (pyglet没有把ctrl+c和ctrl+v的事件绑定到on_text_motion上) self.text = f'{self.text[:self.cursor_poi - 1]}{self.text[self.cursor_poi:]}'
# TODO 正在给pyglet发PR self.cursor_poi = max(0, self._cursor_poi - 1)
if symbol == key.C and modifiers & key.MOD_CTRL: elif motion == key.MOTION_DELETE:
self.on_text_motion(key.MOTION_COPY) if self.text and self.cursor_poi != len(self.text) - 1: # 如果有文字,并且光标不在最后
self.text = f'{self.text[:self.cursor_poi]}{self.text[self.cursor_poi + 1:]}'
# 剪贴板操作
elif motion == key.MOTION_COPY:
pass
elif motion == key.MOTION_PASTE:
paste_text = paste()
self.text = f'{self.text[:self.cursor_poi]}{paste_text}{self.text[self.cursor_poi:]}'
self.cursor_poi += len(paste_text)
def on_text_motion_select(self, motion): def on_text_motion_select(self, motion):
pass pass
@ -210,3 +224,6 @@ class InputBox(widgets.WidgetBase):
def on_commit(self, text: str): def on_commit(self, text: str):
pass pass
InputBox.register_event_type('on_commit')