Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持Entry组建的粘贴,选中功能 #17

Closed
1 task
MeiHuaGuangShuo opened this issue Jun 24, 2024 · 12 comments
Closed
1 task

支持Entry组建的粘贴,选中功能 #17

MeiHuaGuangShuo opened this issue Jun 24, 2024 · 12 comments
Assignees
Labels
✨ Enhancement New feature or request ❤️ Nice Issue Good idea

Comments

@MeiHuaGuangShuo
Copy link

MeiHuaGuangShuo commented Jun 24, 2024

🎯 Feature Description

我搭建一个输入框给用户进行输入操作,但是输入的数据有时又长又复杂,有时需要选中部分文字进行删除,但是这些在tkintertools3.0.0b3是无法实现的

🚀 Possible Implementation

或许可以从tkinter组建找到读取剪贴板并输入控件的方法?我并没有仔细研读过其源代码

✉️ Contact Details

No response

⚠️ Code of Conduct

  • I agree to follow this project's Code of Conduct
@MeiHuaGuangShuo MeiHuaGuangShuo added the ✨ Enhancement New feature or request label Jun 24, 2024
@Xiaokang2022 Xiaokang2022 self-assigned this Jun 24, 2024
@Xiaokang2022
Copy link
Owner

此问题是在计划中的,详情见待办事项,预计在 beta4 或者 rc1 时完成。

注:版本路线为 beta3 -> beta4 -> rc1 -> rc2 -> release

此功能稍微有点复杂,目前文本类控件只有基础的功能(输入、删除、移动光标位置、隐藏过多文本和限制文本长度等),且存在一定的 bug,未来会添加选中、复制、粘贴、剪切、全选、文本替换(如密码框将字符替换为其它字符以隐藏内容)并修复已知 bug。

@MeiHuaGuangShuo
Copy link
Author

此问题是在计划中的,详情见待办事项,预计在 beta4 或者 rc1 时完成。

注:版本路线为 beta3 -> beta4 -> rc1 -> rc2 -> release

此功能稍微有点复杂,目前文本类控件只有基础的功能(输入、删除、移动光标位置、隐藏过多文本和限制文本长度等),且存在一定的 bug,未来会添加选中、复制、粘贴、剪切、全选、文本替换(如密码框将字符替换为其它字符以隐藏内容)并修复已知 bug。

此问题是在计划中的,详情见待办事项,预计在 beta4 或者 rc1 时完成。

注:版本路线为 beta3 -> beta4 -> rc1 -> rc2 -> release

此功能稍微有点复杂,目前文本类控件只有基础的功能(输入、删除、移动光标位置、隐藏过多文本和限制文本长度等),且存在一定的 bug,未来会添加选中、复制、粘贴、剪切、全选、文本替换(如密码框将字符替换为其它字符以隐藏内容)并修复已知 bug。

其实...刚刚我查看了下源代码,找到了一个可能的解决方案,就是在tkintertools>standard>features.py>Entry>_input的函数中监听ctrl v 的事件,我尝试过了,其确实有效。尚未实验其稳定性

@MeiHuaGuangShuo
Copy link
Author

对了,还有一个问题,就是在Entry输入的文本超过文本框的长度时,使用退格键删除文本会将Python卡死,请问您有遇到吗

@Xiaokang2022
Copy link
Owner

不用担心,文本框复制粘贴的功能很简单,这个早在 tkt 2 就实现了(你可以下载 tkt 2 试试),主要是选中和隐藏多余部分的文本不好实现

@Xiaokang2022
Copy link
Owner

对了,还有一个问题,就是在Entry输入的文本超过文本框的长度时,使用退格键删除文本会将Python卡死,请问您有遇到吗

你很仔细,不过这是个已知问题,见之前的 README 的底部已知问题部分(README 更新后没放出来了):
https://github.com/Xiaokang2022/tkintertools/tree/c4bd851db79039dc508ae6c1b76a05bd147f08aa

由于当前属于 beta 版本,我就没有将这个问题摆出来,怕别人误以为是稳定版的问题

@Xiaokang2022
Copy link
Owner

这是当时无法很好实现隐藏多余文本功能时产生的 bug,由于 tkt 框架的原因,此功能目前貌似无法依靠 tkinter 相关功能实现,必须重新编写相关事件和功能,比较麻烦(这一个功能的难度比完成其它所有控件的功能都还复杂),所以暂时没有完善好它

@MeiHuaGuangShuo
Copy link
Author

我发现在向entry输入文本时是对Text对象进行加减,请问关于相关的控制显示字体的代码是在哪里呢?我无法找到那部分代码,我也找不到Entry->_input那段代码的move_area在Text的实现。可以解答一下吗?我想看看我是否有能力去调整。

@Xiaokang2022
Copy link
Owner

standard.virtual.Text 的属性 font 存储着字体相关数据,它是一个 Font 类型的变量,修改它并通过 configure 方法更新一下即可将显示的字体更新。(这是控制字体,不是文本内容)

目前没有关于方法 move_area 的调用,因为这个类本身就有许多问题没有解决,有些东西还不完善,先暂时放着。你可以给它试着加一些方法供内部或外部调用。

顺便提一下框架结构吧,Widget 由 4 部分组成:ShapeTextImageFeature,每个部分只控制属于自己的内容,ShapeTextImage 给内部提供修改自身内容的接口,而 Feature 控制整个 Widget 的功能和行为,它就相当于外部操作与 Widget 内部沟通的桥梁。通过修改各种 ShapeTextImageFeature 的子类以实现多态,再通过种类与数量的组合即可拼凑出一个完整的 Widget

关于文本输入的功能,应当在 Text 子类 SingleLineText 中提供相关接口,并完善 Feature 子类 Entry,让其与 SingleLineText 对接好,这样在 Widget 层面的 Entry 类无需修改过多内容。(注:上述提到的两个 Entry 并非指同一个,只是同名)

Xiaokang2022 added a commit that referenced this issue Jul 5, 2024
Added parameter `show` to mask the original character content;
The new parameter `placeholder` will prompt you when the input box is empty;
The new parameter `align` determines the alignment of the text in the input box, which supports left, right and center methods;
#17: Ctrl+V shortcut key combination is supported to paste text to the cursor.
@Xiaokang2022
Copy link
Owner

@MeiHuaGuangShuo

文本粘贴功能已经实现,复制、剪切的 API 已写好,但由于暂时没有实现选中的功能,暂不将它们完全实现,具体见 Commit:366b646

同时增加的功能还有:

  • 参数 show,功能同 tkinterEntry 控件的参数 show,可替换原来的字符进行掩盖,譬如密码框
  • 参数 placeholder,功能与 Web 的输入框的参数 placeholder,当输入框为空时,显示一个提示文本
  • 参数 align,功能与 Web 的输入框的 text-align 类似,让文本靠左、居中和靠右

当前提交不代表 3.0.0.beta4 最终版本的效果,API 可能会产生改动,仅供参考

Xiaokang2022 added a commit that referenced this issue Jul 5, 2024
#17: The input box now supports the text selection function;
#17: The input box now supports full copy, paste, and cut operations;
Added widget 'IconButton'
@Xiaokang2022
Copy link
Owner

@MeiHuaGuangShuo

输入框已完全支持文本的选中、复制、粘贴、剪切以及双击全选功能了,细见:d62770d

上述提交不代表 3.0.0.beta4 最终版本的效果,API 可能会产生改动,仅供参考

但输入框仍存在之前提到的 bug,这个会在 3.0.0.beta4 发布前解决!由于此 bug 并未直接在 Issue 主体内容中提到,我不会将其也视为该 Issue 需完成的内容,因此我将关闭该 Issue

最后,感谢您提供的功能建议!❤️

@Xiaokang2022
Copy link
Owner

Xiaokang2022 commented Jul 5, 2024

添加一张效果图以展示:

b0d8507b8aabab256b91142e851363c6

我人要熄火了,半夜突发灵感于是通宵搞定了这些问题,得先去睡觉了,一时半会儿不会回复你(如果很久我都没回复你,说明我……bushi)

@Xiaokang2022
Copy link
Owner

输入框删除键导致死循环从而卡死的 bug 已解决:651cbbb

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Enhancement New feature or request ❤️ Nice Issue Good idea
Projects
None yet
Development

No branches or pull requests

2 participants