关于 Python3 tkinter 的一个问题

2019-07-07 16:38:13 +08:00
 0clickjacking0

我想做一个编码进制转换器,但是遇到了一些问题。就是我想在输入文字之后,立刻输出解码或者编码后的内容,就是输入与输出同步

我的代码如下

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 的代码

请问各位师傅该如何做到这样的效果

2440 次点击
所在节点    Python
7 条回复
guiqiqi
2019-07-07 17:43:36 +08:00
我记得 tkinter 好像是没有 entry 的 textchanged 事件,提供一个蠢思路:
把键盘的全部按键都监听一下,回调到同一个函数;用回调函数更新 stringvar 的值,这样大体能够实现。
0clickjacking0
2019-07-07 18:17:25 +08:00
@guiqiqi 谢谢你!!我已经解决了,感谢提供思路
leavic
2019-07-07 18:55:09 +08:00
早日放弃 tkinter,改用 pyqt
guiqiqi
2019-07-07 18:58:44 +08:00
@leavic tk 写一些小工具还是很方便的,而且毕竟开箱即用,打包体积比 qt 也小一些,个人觉得还是不错的。
Cooky
2019-07-07 19:05:08 +08:00
tkinter 查个资料太费劲
limyel
2019-07-08 09:38:45 +08:00
您怎么解决的呀,用多线程吗
0clickjacking0
2019-07-08 12:06:06 +08:00
@limyel 代码贴在上面了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/580755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX