updateing
This commit is contained in:
parent
26d0a1e821
commit
4476d79a60
@ -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 可自定义工作路径
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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')
|
||||||
|
Loading…
Reference in New Issue
Block a user