鱼C论坛

 找回密码
 立即注册
查看: 2736|回复: 2

[已解决]Tkinter Entry 组件的scan_mark(x) 怎么用

[复制链接]
发表于 2020-1-21 10:50:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
scan_dragto(x)
--  见下方 scan_mark(x)

scan_mark(x)
-- 使用这种方式来实现输入框内容的滚动
-- 需要将鼠标按下事件绑定到 scan_mark(x) 方法(x 是鼠标当前的水平位置),然后再将 <motion> 事件绑定到 scan_dragto(x) 方法(x 是鼠标当前的水平位置),就可以实现输入框在当前位置和 sacn_mack(x) 指定位置之间的水平滚动

就是这个 描述看不懂
有什么例子可以解释下吗
最佳答案
2020-1-21 23:09:01
在Entry插件里,scan_mark()和scan_dragto()应该是比较少见的方法,
查了很多资料也没有搞清楚,我写一下我自己的发现吧。
Entry对象是一个单行文本输入栏,这两个方法应该是对文本长度大于输入栏的情况的。

首先创建了一个Entry对象,将输入框内容提前设置为一串长字符串。

  1. import tkinter as tk
  2. window = tk.Tk()
  3. window.geometry("300x200")
  4. var = tk.StringVar()
  5. var.set("0123456789abcdefghijklmnopqrstuvwxyz0123456789")
  6. e1 = tk.Entry(window,show = None,font = ('黑体',12),bd=3,width = 15,textvariable = var)
  7. e1.pack()
复制代码
我没有使用绑定的方法,而是用一个按钮调用这两个方法。
  1. def b_func():
  2.         e1.scan_mark(0)
  3.         e1.scan_dragto(-2)
  4. #创建一个按钮并放置,点击按钮调用b_func函数
  5. button = tk.Button(window,text = "button",font =('Arial',10),command = b_func)
  6. button.pack()
  7. window.mainloop()
复制代码
这样,可以通过调整两个方法的参数看结果。
经过尝试,这两个方法可能是调整输入栏中文本的位置的,调整的距离为两个方法的参数的差,
例如,   e1.scan_mark(0),e1.scan_dragto(-2)的作用是:每次按下按钮,文本向右移动两格。
试了几个其他的数也是这样。

但是当参数比较大的时候,比如4和-1,却是每次向右移动6格,可能是字体的原因?
另外,我在shell里输入help(tkinter.Entry),在文档里找到这样一段:
|  Methods defined here:
……
|  scan_dragto(self, x)
|      Adjust the view of the canvas to 10 times the
|      difference between X and Y and the coordinates given in
|      scan_mark.
|
|  scan_mark(self, x)
|      Remember the current X, Y coordinates.
感觉不常用……

希望对你有帮助。



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-1-21 23:09:01 | 显示全部楼层    本楼为最佳答案   
在Entry插件里,scan_mark()和scan_dragto()应该是比较少见的方法,
查了很多资料也没有搞清楚,我写一下我自己的发现吧。
Entry对象是一个单行文本输入栏,这两个方法应该是对文本长度大于输入栏的情况的。

首先创建了一个Entry对象,将输入框内容提前设置为一串长字符串。

  1. import tkinter as tk
  2. window = tk.Tk()
  3. window.geometry("300x200")
  4. var = tk.StringVar()
  5. var.set("0123456789abcdefghijklmnopqrstuvwxyz0123456789")
  6. e1 = tk.Entry(window,show = None,font = ('黑体',12),bd=3,width = 15,textvariable = var)
  7. e1.pack()
复制代码
我没有使用绑定的方法,而是用一个按钮调用这两个方法。
  1. def b_func():
  2.         e1.scan_mark(0)
  3.         e1.scan_dragto(-2)
  4. #创建一个按钮并放置,点击按钮调用b_func函数
  5. button = tk.Button(window,text = "button",font =('Arial',10),command = b_func)
  6. button.pack()
  7. window.mainloop()
复制代码
这样,可以通过调整两个方法的参数看结果。
经过尝试,这两个方法可能是调整输入栏中文本的位置的,调整的距离为两个方法的参数的差,
例如,   e1.scan_mark(0),e1.scan_dragto(-2)的作用是:每次按下按钮,文本向右移动两格。
试了几个其他的数也是这样。

但是当参数比较大的时候,比如4和-1,却是每次向右移动6格,可能是字体的原因?
另外,我在shell里输入help(tkinter.Entry),在文档里找到这样一段:
|  Methods defined here:
……
|  scan_dragto(self, x)
|      Adjust the view of the canvas to 10 times the
|      difference between X and Y and the coordinates given in
|      scan_mark.
|
|  scan_mark(self, x)
|      Remember the current X, Y coordinates.
感觉不常用……

希望对你有帮助。



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-22 11:08:15 | 显示全部楼层
EthanHsiung 发表于 2020-1-21 23:09
在Entry插件里,scan_mark()和scan_dragto()应该是比较少见的方法,
查了很多资料也没有搞清楚,我写一下 ...

太感谢了  我也是查了半天,没找到,想自己试试又无从下手
幸好你帮我解决了这个问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 11:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表