开发一个GUI界面,对两个十进制数字执行按位AND,OR,NOT,XOR运算,并使用python进行解释

时间:2016-10-29 11:00:06

标签: python tkinter

我想让python程序看起来像this 所以我做了类似的代码看:

from Tkinter import *
import Tkinter
import tkMessageBox
top=Tkinter.Tk()
def and1(a,b):
    print int(a and b)
def or1(a,b):
    print int(a or b)
def not1(a):
    print int(not a)
def xor1(a,b):
    print int((a and not b) or (not a and b))
def exit1(top):
    top.destroy()
def exit2(top):
    top.destroy()
def expl():
    top=Tkinter.Tk()
    l1=Label(top,text="Number 1").grid(row=0,column=0)
    e1=Entry(top,bd=5)
    e1.grid(row=0,column=1)
    e3=Entry(top,bd=5)
    l3=Label(top,text="Binary Number 1").grid(row=0,column=2)
    e3.grid(row=0,column=3)
    l2=Label(top,text="Number 2").grid(row=1,column=0)
    e2=Entry(top,bd=5)
    e2.grid(row=1,column=1)
    l4=Label(top,text="Binary Number 2").grid(row=1,column=2)
    e4=Entry(top,bd=5)
    e4.grid(row=1,column=3)
    l5=Label(top,text="t.f.p.r.s").grid(row=2,column=2) #says text from previous radiobutton selection
    e5=Entry(top,bd=5)
    e5.grid(row=2,column=3)
    l6=Label(top,text="Decimal Result").grid(row=3,column=1)
    e6=Entry(top,bd=5)
    e6.grid(row=3,column=2)
    b1=Tkinter.Button(top,bd=5,text="Exit",command=lambda top=top:exit2(top)).grid(row=4,column=0)
    top.mainloop()
L1=Label(top,text="Number 1").grid(row=0,column=0)
E1=Entry(top,bd=5)
E1.grid(row=0,column=1)
L2=Label(top,text="Number 2").grid(row=0,column=2)
E2=Entry(top,bd=5)
E2.grid(row=0,column=3)
var=IntVar()
R1=Radiobutton(top,text="AND",variable=var,value=1,command="and1")
R1.grid(row=1,column=0)
R2=Radiobutton(top,text="OR",variable=var,value=2,command="or1")
R2.grid(row=1,column=1)
R3=Radiobutton(top,text="NOT",variable=var,value=3,command="not1")
R3.grid(row=2,column=0)
R4=Radiobutton(top,text="XOR",variable=var,value=4,command="xor1")
R4.grid(row=2,column=1)
label=Label(top)
label.grid()
B1=Tkinter.Button(top,text="Result is:",command="result",bd=5)
B1.grid(row=3,column=0)
B2=Tkinter.Button(top,text="Explanation",command=expl,bd=5)
B2.grid(row=3,column=1)
B3=Tkinter.Button(top,bd=5,text="Exit",command=lambda top=top:exit1(top)).grid(row=3,column=2)
L3=Label(top,text="Result is:").grid(row=4,column=0)
E3=Entry(top,bd=5)
E3.grid(row=4,column=1)
top.mainloop()

现在修改了。我希望用户应该在第一帧中输入值并相应地得到结果,同样在解释点击时,其他帧打开并仅使用之前的值进行解释。

1 个答案:

答案 0 :(得分:0)

我不知道该说些什么。我不想为你彻底解决问题,但我希望更好地理解Python的Tkinker。阅读课程,将来会有所帮助。

#!/usr/bin/python


from Tkinter import *
import Tkinter
import tkMessageBox
top=Tkinter.Tk()
res = 0
tfprs = ""
def and1(a,b):
    global res
    res = int(a and b)
def or1(a,b):
    global res
    res  = int(a | b)
def not1(a):
    global res
    res = int(not a)
def xor1(a,b):
    global res
    res = int((a and not b) or (not a and b))
def result(event=None):
    global top,res,E3
    text = StringVar()
    E3=Entry(top,textvariable=text,bd=5)
    E3.grid(row=4,column=1)
    text.set(str(res))
def exit1(top):
    top.destroy()
def exit2(top):
    top.destroy()
def selected():
    global tfprs
    tfprs = var.get()
def expl(a,b):
    global top,tfprs,res
    binary1 = StringVar()
    binary2 = StringVar()
    top1=Tkinter.Toplevel(top)
    value1 = IntVar()
    l1=Label(top1,text="Number 1").grid(row=0,column=0)
    e1=Entry(top1,textvariable = value1,bd=5)
    value1.set(a)
    e1.grid(row=0,column=1)
    e3=Entry(top1,textvariable = binary1,bd=5)
    l3=Label(top1,text="Binary Number 1").grid(row=0,column=2)
    binary1.set(format(a,'b'))
    e3.grid(row=0,column=3)
    value2 = IntVar()
    l2=Label(top1,text="Number 2").grid(row=1,column=0)
    e2=Entry(top1,textvariable = value2,bd=5)
    value2.set(b)
    e2.grid(row=1,column=1)
    l4=Label(top1,text="Binary Number 2").grid(row=1,column=2)
    e4=Entry(top1,textvariable = binary2,bd=5)
    binary2.set(format(b,'b'))
    e4.grid(row=1,column=3)
    l5=Label(top1,text="t.f.p.r.s").grid(row=2,column=2) #says text from previous radiobutton selection
    operator = StringVar()
    e5=Entry(top1,textvariable = operator,bd=5)
    operator.set(tfprs)
    operator.set(tfprs)
    e5.grid(row=2,column=3)
    dres = IntVar()
    l6=Label(top1,text="Decimal Result").grid(row=3,column=1)
    e6=Entry(top1,textvariable = dres ,bd=5)
    dres.set(res)
    e6.grid(row=3,column=2)
    b1=Tkinter.Button(top1,bd=5,text="Exit",command=lambda top=top1:exit2(top1)).grid(row=4,column=0)
    top.mainloop()
def dotwo(a,b):
    selected()
    expl(a,b)

num1 = IntVar()
L1=Label(top,text="Number 1").grid(row=0,column=0)
E1=Entry(top,textvariable = num1,bd=5)
num1.set(1)
E1.grid(row=0,column=1)
num2 = IntVar()
L2=Label(top,text="Number 2").grid(row=0,column=2)
E2=Entry(top,textvariable =num2,bd=5)
num2.set(1)
E2.grid(row=0,column=3)
var=StringVar()

R1=Radiobutton(top,text="AND",variable=var,value="AND",command=lambda: and1(int(E1.get()),int(E2.get())))
R1.grid(row=1,column=0)
R2=Radiobutton(top,text="OR",variable=var,value="OR",command=lambda: or1(int(E1.get()),int(E2.get())))
R2.grid(row=1,column=1)
R3=Radiobutton(top,text="NOT",variable=var,value="NOT",command=lambda: not1(int(E1.get())))
R3.grid(row=2,column=0)
R4=Radiobutton(top,text="XOR",variable=var,value="XOR",command=lambda: xor1(int(E1.get()),int(E2.get())))
R4.grid(row=2,column=1)
label=Label(top)
label.grid()

B1=Tkinter.Button(top,text="Result is:",command=result,bd=5)
B1.grid(row=3,column=0)
B2=Tkinter.Button(top,text="Explanation",command=lambda:dotwo(int(E1.get()),int(E2.get())),bd=5)
B2.grid(row=3,column=1)
B3=Tkinter.Button(top,bd=5,text="Exit",command=lambda top=top:exit1(top)).grid(row=3,column=2)
L3=Label(top,text="Result is:").grid(row=4,column=0)
E3=Entry(top,bd=5)
E3.grid(row=4,column=1)
top.mainloop()