Ich schreibe ein einfaches Programm, um eine Zahl zwischen Basis 10, 2, 8 und 16 zu wechseln. Allerdings habe ich Probleme mit mehreren Konvertierungen oder Konvertierung zurück zu denary. Hier ist der Code ich verwendePython3 - Probleme mit der Konvertierung zwischen verschiedenen Zahlensystemen
#! 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()
Wie Sie sehen können, ist die Idee, dass die Zahl in den ent TK-Eingabefeld ändert sich basierend auf den Knopf drücken. Bis jetzt wird es von der Höhle zu einem anderen System wechseln und sich dann weigern, sich zu ändern oder wieder zu arbeiten. Ich würde mich über jede Hilfe oder Beratung zu diesem Thema freuen. Danke
Machen Sie Ihren Code modular. Vergessen Sie den Tkinter für eine Weile komplett und konzentrieren Sie sich nur darauf, die Konvertierungsfunktion oder Funktionen richtig zu machen. Dann - rufe sie in deinen Event-Handlern auf. Welche Probleme haben Sie mit der Umstellung selbst? –
Beim Ausführen mit Python3.4 gibt es ständig Fehlermeldungen wie: ent.insert (0, okt (Wert)) TypeError: 'str' Objekt kann nicht als eine ganze Zahl interpretiert werden. Höchstwahrscheinlich besteht das Problem darin, dass die Werte als Strings dargestellt werden und Ihre oct/hex-Befehle fehlschlagen. –
Um meinen letzten Kommentar zu erweitern, wäre es eine gute Strategie, eine Python-Funktion 'changeBase (s, a, b)' zu schreiben, die eine * string * 's', eine int' a', die die aktuelle Basis von 's' und ein int' b', das die Zielbasis darstellt und eine Zeichenfolge zurückgibt, die die Zahl in der Zielbasis darstellt. Holen Sie sich das, so dass es einwandfrei in der Shell läuft (vielleicht schreiben Sie ein Testskript dafür, das alle 4x4 = 16 gültige Fälle testet) und sich dann sorgen, wie man es in tkinter einbindet –