ssfjhh 发表于 2013-01-19 11:33

有没有native一点的Text控件 for tkinter?

自带的控件连基本的撤消,复制,粘贴,剪切命令都没有,这些命令还好说,大不了自己写进去,也不难
可是行间距怎么调呀,字都挤在一起了,很难看。

cdhigh 发表于 2013-01-19 21:55

自带的TEXT控件是有undo栈的,撤销功能是可以实现的,只是需要自己绑定菜单或快捷键到TEXT控件。

在回调函数中除了调用TEXT控件的相关方法外,还可以发送消息到控件,比如:Text1.event_generate("<<Cut>>")
相关虚拟方法有:<<Cut>>,<<Copy>>,<<Paste>>,<<PasteSelection>>,<<SelectAll>>,<<Undo>>,<<Redo>>等,还有很多,自己寻找。

至于行间距:可以调整Text控件的spacing1,spacing2,spacing3参数,默认为0,设置大一些的数值就可以了。

ssfjhh 发表于 2013-01-20 08:37

回复 2# cdhigh


    这个我知道,事实上我已经在用event_generate这样的功能,只是看到别人写的好多软件中的文本框都有和记事本完全一样的右键菜单和其它功能,非常的native所以问问tkinter有没这样的控件。只是调间距这个参数我确实不知道,看了帮助文档也没有找到,多谢告知。

ssfjhh 发表于 2013-01-20 21:12

回复 2# cdhigh from tkinter import *
from tkinter.ttk import *
root = Tk()
t = Text(root)
for i in range(20):
    t.insert(END, '0123456789')

t.pack()
t.event_generate('<<SelectAll>>')
root.mainloop()我试了下,窗口中的文本并没有在选中状态,不知道哪里不对。

   

cdhigh 发表于 2013-01-22 20:27

这个我也不太清楚了,从TK代码看,<<SelectAll>>的实现应该是没问题的,可能python使用的tk版本不对?
这个有待高人解答。

ssfjhh 发表于 2013-01-23 09:09

本帖最后由 ssfjhh 于 2013-10-13 12:33 编辑

回复 5# cdhigh


又试了下,果然是一个虚拟事件都不响应。这么好的东西,tkinter怎么就没有呢。from tkinter import *
from tkinter.ttk import *
root = Tk()
root.columnconfigure(0, weight = 1)
root.columnconfigure(8, weight = 1)
root.rowconfigure(0, weight = 1)
t = Text(root)
t.grid(row = 0, column = 0, columnspan = 9, sticky = N+E+W+S)
sltallbutton = Button(root, text = 'Select All', command = t.event_generate('<<SelectAll>>'))
sltallbutton.grid(row = 1, column = 1, padx = 5, pady = 5)
cutbutton = Button(root, text = 'Cut', command = t.event_generate('<<Cut>>'))
cutbutton.grid(row = 1, column = 2, padx = 5, pady = 5)
copybutton = Button(root, text = 'Copy', command = t.event_generate('<<Copy>>'))
copybutton.grid(row = 1, column = 3, padx = 5, pady = 5)
pstbutton = Button(root, text = 'Paste', command = t.event_generate('<<Paste>>'))
pstbutton.grid(row = 1, column = 4, padx = 5, pady = 5)
pstsltbutton = Button(root, text = 'Paste Selection', command = t.event_generate('<<PasteSelection>>'))
pstsltbutton.grid(row = 1, column = 5, padx = 5, pady = 5)
undobutton = Button(root, text = 'Undo', command = t.event_generate('<<Undo>>'))
undobutton.grid(row = 1, column = 6, padx = 5, pady = 5)
redobutton = Button(root, text = 'Redo', command = t.event_generate('<<Redo>>'))
redobutton.grid(row = 1, column = 7, padx = 5, pady = 5)
root.mainloop()

clement_leiy 发表于 2013-10-13 12:21

回复 1# ssfjhh
请问楼主,如何给python Tkinter中的Text控件加上鼠标事件。鼠标右键单击可以出来复制,黏贴,剪切,撤销操作。急用,谢谢楼主


   

ssfjhh 发表于 2013-10-13 12:40

clement_leiy 发表于 2013-10-13 12:21 static/image/common/back.gif
回复 1# ssfjhh
请问楼主,如何给python Tkinter中的Text控件加上鼠标事件。鼠标右键单击可以出来复制,黏 ...


我也不懂这些虚拟事件为什么不能响应,但快捷键如ctrl+c,ctrl+x,ctrl+v这些按键组合还是完全可以用的,如果你想实现"剪切,复制,粘贴“这几个功能,倒是可以绑定这几个按键来实现(猜测可行,没验证过),但是这个ctrl+z却不能用,所以undo我也不知道该怎么实现了。

laike9m 发表于 2013-10-13 15:26

ttk有没有可能呢?

ssfjhh 发表于 2013-10-13 15:35

回复 9# laike9m


    你看下我在六楼的示例,按五楼cdhigh的说法,应该是能的,但是我也不明白为什么办不到。

另外,在你还没有用tkinter写代码前看看这个,再决定要不要用它。

http://ask.chinaunix.net/question/2251
页: [1] 2
查看完整版本: 有没有native一点的Text控件 for tkinter?