【发布时间】:2016-08-26 06:11:30
【问题描述】:
我正在编写一个简单的程序来在基数 10、2、8 和 16 之间切换数字。但是我在多次转换或转换回拒绝数时遇到问题。这是我正在使用的代码
#! python3
import tkinter as tk
from tkinter import ttk
CurrentSystem = 'd'
def clearEnt():
ent.delete(0, last = None)
def baseConverter(value,base):
try:
if base == 2:
clearEnt()
ent.insert(0, bin(value))
CurrentSystem = 'b'
if base == 8:
clearEnt()
ent.insert(0, oct(value))
CurrentSystem == 'o'
if base == 16:
clearEnt()
ent.insert(0, hex(value))
CurrentSystem == 'h'
if base == 10:
if CurrentSystem == 'b':
clearEnt()
ent.insert(0, int(value, 2))
if CurrentSystem == 'o':
clearEnt()
ent.insert(0, int(value, 8))
if CurrentSystem == 'h':
clearEnt()
ent.insert(0, int(value, 16))
except ValueError:
clearEnt()
ent.insert(0, 'ERROR')
root = tk.Tk()
root.title('Number Converter')
ent = ttk.Entry()
ent.grid (row = 0, column = 1, columnspan = 2, padx = 5)
button1 = ttk.Button(root, text = "Den")
button2 = ttk.Button(root, text = "Bin", command = lambda:baseConverter(int(ent.get()), 2))
button3 = ttk.Button(root, text = "Oct", command = lambda:baseConverter(ent.get(), 8))
button4 = ttk.Button(root, text = "Hex", command = lambda:baseConverter(ent.get(), 16))
button1.grid(row = 1, column = 0)
button2.grid(row = 1, column = 1)
button3.grid(row = 1, column = 2)
button4.grid(row = 1, column = 3)
root.mainloop()
如您所见,这个想法是 ent TK 输入框中的数字会根据按钮按下而变化。到目前为止,它将从 den 更改为另一个系统,然后拒绝更改或再次工作。我将不胜感激任何帮助或建议。谢谢
【问题讨论】:
-
让你的代码模块化。暂时完全忘记 tkinter,只专注于获得正确的转换功能。然后 - 在您的事件处理程序中适当地调用它们。转换本身有什么问题?
-
使用 python3.4 运行时,会不断出现错误消息,例如:ent.insert(0, oct(value)) TypeError: 'str' object cannot be Explained as an integer。最有可能的问题是值被表示为字符串并且您的 oct/hex 命令失败。
-
为了扩展我的最后一条评论,一个好的策略是编写一个 Python 函数
changeBase(s,a,b),它需要一个 strings,一个 inta表示s的当前基数和一个表示目标基数的 intb,它返回一个表示目标基数中的数字的字符串。得到它以便它在 shell 中完美运行(也许为它编写一个测试脚本来测试所有 4x4 = 16 个有效案例),然后担心如何将它连接到 tkinter
标签: python python-3.x tkinter binary converter