练习2:GUI程序

from tkinter import *



class NumberTransfer:

    def __init__(self):

        self.frame = Tk()

        self.frame.title('进制转换工具')

        self.frame.geometry('705x500+400+50')

        self.frame.resizable(0, 0)

        self.frame['bg'] = 'lightgray'

        # 在窗体里放一个图片

        self.banner_image = PhotoImage(file='./image/number.png')

        self.banner_top = Label(self.frame, image=self.banner_image)

        self.banner_top.place(x=0, y=0)

        # 选择进制

        self.label_select = Label(self.frame, text='请选择要输入的进制:', bg='lightgray', font=('宋体', 14, 'bold'))

        self.label_select.place(x=10, y=150)


        self.var_number = IntVar()  # 定义一个变量,四个单选按钮绑定这同一个变量

        self.radio_bin = Radiobutton(self.frame, text='二进制', bg='lightgray', font=('宋体', 14, 'bold'), variable=self.var_number, value=2)

        self.radio_bin.place(x=210, y=150)

        self.radio_oct = Radiobutton(self.frame, text='八进制', bg='lightgray', font=('宋体', 14, 'bold'), variable=self.var_number, value=8)

        self.radio_oct.place(x=300, y=150)

        self.radio_dec = Radiobutton(self.frame, text='十进制', bg='lightgray', font=('宋体', 14, 'bold'), variable=self.var_number, value=10)

        self.radio_dec.place(x=390, y=150)

        self.radio_hex = Radiobutton(self.frame, text='十六进制', bg='lightgray', font=('宋体', 14, 'bold'), variable=self.var_number, value=16)

        self.radio_hex.place(x=480, y=150)

        # 输入区域

        self.label_input = Label(self.frame, text='请输入具体的数值:', bg='lightgray', font=('宋体', 14, 'bold'))

        self.label_input.place(x=29, y=190)


        self.var_input = StringVar()  # 定义一个变量,和输入文本框进行绑定

        self.entry_input = Entry(self.frame, font=('宋体', 14, 'bold'), width=32, textvariable=self.var_input)

        self.entry_input.place(x=215, y=190)


        self.button_input = Button(self.frame, text='计算', font=('宋体', 13, 'bold'), width=8, command=self.get_number)

        self.button_input.place(x=590, y=187)

        # 显示结果

        self.label_result = Label(self.frame, text='结果:', bg='lightgray', fg='red', font=('宋体', 14, 'bold'))

        self.label_result.place(x=150, y=230)


        self.label_bin = Label(self.frame, text='二进制:', bg='lightgray', fg='blue', font=('宋体', 14, 'bold'))

        self.label_bin.place(x=230, y=230)

        self.label_bin_result = Label(self.frame, text='二进制输出的结果', bg='lightgray', fg='green', font=('宋体', 14, 'bold'))

        self.label_bin_result.place(x=330, y=230)


        self.label_oct = Label(self.frame, text='八进制:', bg='lightgray', fg='blue', font=('宋体', 14, 'bold'))

        self.label_oct.place(x=230, y=260)

        self.label_oct_result = Label(self.frame, text='八进制输出的结果', bg='lightgray', fg='green', font=('宋体', 14, 'bold'))

        self.label_oct_result.place(x=330, y=260)


        self.label_dec = Label(self.frame, text='十进制:', bg='lightgray', fg='blue', font=('宋体', 14, 'bold'))

        self.label_dec.place(x=230, y=290)

        self.label_dec_result = Label(self.frame, text='十进制输出的结果', bg='lightgray', fg='green', font=('宋体', 14, 'bold'))

        self.label_dec_result.place(x=330, y=290)


        self.label_hex = Label(self.frame, text='十六进制:', bg='lightgray', fg='blue', font=('宋体', 14, 'bold'))

        self.label_hex.place(x=210, y=320)

        self.label_hex_result = Label(self.frame, text='十六进制输出结果', bg='lightgray', fg='green', font=('宋体', 14, 'bold'))

        self.label_hex_result.place(x=330, y=320)


    def show(self):

        self.frame.mainloop()


    # 把十进制转化为二进制、八进制、十进制、十六进制

    def transfer_number(self, number: int):

        number_list = []

        number_list.append(bin(number))

        number_list.append(oct(number))

        number_list.append(number)

        number_list.append(hex(number))

        return number_list


    # 不管选择什么类型,先转换为十进制数

    def get_type_ten_number(self, type_number: int, number: str):

        if type_number == 2:

            return int(number, 2)

        if type_number == 8:

            return int(number, 8)

        if type_number == 10:

            return int(number)

        if type_number == 16:

            return int(number, 16)


    def get_number(self):

        input_number = self.var_input.get()  # 输入的数据

        type_number = self.var_number.get()  # 选择的进制类型

        ten_number = self.get_type_ten_number(type_number, input_number)

        number_list = self.transfer_number(ten_number)

        self.label_bin_result['text'] = number_list[0]

        self.label_oct_result['text'] = number_list[1]

        self.label_dec_result['text'] = number_list[2]

        self.label_hex_result['text'] = number_list[3]



if __name__ == '__main__':

    this_gui = NumberTransfer()

    this_gui.show()


猜你喜欢

转载自blog.51cto.com/11009785/2369690