我想做一个编码进制转换器,但是遇到了一些问题。就是我想在输入文字之后,立刻输出解码或者编码后的内容,就是输入与输出同步
我的代码如下
e = tk.Entry(self.initface)
e.pack()
def go(*args): # 处理事件,*args 表示可变参数
# e.delete(0, 'END')
# URL 解码
if comboxlist.get() == 'URL':
var = e.get()
t.insert('end',unquote(var))
# base64 解码
if comboxlist.get() == 'Base64':
var = e.get()
t.insert('end',base64.b16decode(var))
# 将转换成 16 进制
if comboxlist.get() == 'Hex':
var = e.get()
t.delete(1.0,'end')
t.insert('end',hex(int(var)))
# 将转换成 8 进制
if comboxlist.get() == 'Octal':
var = e.get()
t.insert('end',oct(var))
# 将转换成 2 进制
if comboxlist.get() == 'Binary':
var = e.get()
t.insert('end',bin(var))
comvalue = tk.StringVar() # 窗体自带的文本,新建一个值
comboxlist = ttk.Combobox(self.initface, textvariable=comvalue, state='readonly') # 初始化
comboxlist["values"] = ('Decode as', "URL", "Base64", "Hex", "Octal",'Binary')
comboxlist.current(0) # 选择第一个
comboxlist.bind("<<ComboboxSelected>>", go) # 绑定事件,(下拉列表框被选中时,绑定 go()函数)
comboxlist.pack()
t = tk.Text(self.initface,height = 4)
t.pack()
类似这样的,但这个是 java 的代码
请问各位师傅该如何做到这样的效果
实现代码如下
import tkinter as tk
def callback(sv):
t.delete(1.0, 'end')
t.insert('end',sv.get())
root = tk.Tk()
sv = tk.StringVar()
sv.trace("w", lambda name, index, mode, sv=sv: callback(sv))
e = tk.Entry(root, textvariable=sv)
e.pack()
t = tk.Text(root,height = 3)
t.pack()
root.mainloop()
1
guiqiqi 2019-07-07 17:43:36 +08:00 via iPhone
我记得 tkinter 好像是没有 entry 的 textchanged 事件,提供一个蠢思路:
把键盘的全部按键都监听一下,回调到同一个函数;用回调函数更新 stringvar 的值,这样大体能够实现。 |
2
0clickjacking0 OP @guiqiqi 谢谢你!!我已经解决了,感谢提供思路
|
3
leavic 2019-07-07 18:55:09 +08:00
早日放弃 tkinter,改用 pyqt
|
4
guiqiqi 2019-07-07 18:58:44 +08:00 via iPhone
@leavic tk 写一些小工具还是很方便的,而且毕竟开箱即用,打包体积比 qt 也小一些,个人觉得还是不错的。
|
5
Cooky 2019-07-07 19:05:08 +08:00
tkinter 查个资料太费劲
|
6
limyel 2019-07-08 09:38:45 +08:00
您怎么解决的呀,用多线程吗
|
7
0clickjacking0 OP @limyel 代码贴在上面了
|