import tkinter as tk import random class Calculator: def __init__(self, master): self.master = master master.title("Calculator") # 定义计算器显示屏 self.display = tk.Entry(master, width=50, font=('Arial', 16), justify='right') self.display.grid(row=0, column=0, columnspan=4, padx=5, pady=5) # 定义按钮 self.buttons = [ '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', 'C', '+','=' ] # 随机化按钮位置 random.shuffle(self.buttons) # 将按钮添加到界面上 row = 1 col = 0 for button_text in self.buttons: button = tk.Button(master, text=button_text, width=10, height=5,font=10,bg='red', command=lambda x=button_text: self.button_click(x)) button.grid(row=row, column=col, padx=5, pady=5) col += 1 if col > 3: col = 0 row += 1 # 添加菜单 menu = tk.Menu(master) master.config(menu=menu) view_menu = tk.Menu(menu) menu.add_cascade(label="查看", menu=view_menu) view_menu.add_command(label="基本型") view_menu.add_command(label="科学型") help_menu = tk.Menu(menu) menu.add_cascade(label="帮助", menu=help_menu) help_menu.add_command(label="关于我们") def button_click(self, text): if text == 'C': self.display.delete(0, tk.END) elif text == '=': try: result = str(eval(self.display.get())) self.display.delete(0, tk.END) self.display.insert(0, result) except: self.display.delete(0, tk.END) self.display.insert(0, "Error") else: self.display.insert(tk.END, text) root = tk.Tk() calc = Calculator(root) root.mainloop()
时间: 2024-02-15 19:28:23 浏览: 32
这是一个用 Python 语言编写的计算器程序,使用了 Tkinter 模块创建了一个 GUI 界面。程序界面中有一个显示屏用于显示计算结果,还有一组按钮用于进行计算。
程序的主要逻辑是在按钮被点击时调用 `button_click` 方法,该方法根据点击的按钮上的文本进行不同的操作。如果点击了 'C' 按钮,则清空显示屏上的内容;如果点击了 '=' 按钮,则将显示屏上的内容作为表达式进行求值,并将结果显示在显示屏上;如果点击了其他数字或运算符按钮,则将对应的字符插入到显示屏中。此外,程序还随机排列了按钮的位置,提高了界面的美观性。
程序中还添加了一个菜单栏,包括“查看”和“帮助”两个菜单,其中“查看”菜单下有“基本型”和“科学型”两个选项,“帮助”菜单下有“关于我们”选项。
相关问题
为每条代码添加注释:import tkinter as tk class ChildWindow: def __init__(self, master): self.master = master self.current_image = 1 self.img1 = tk.PhotoImage(file='image1.gif') self.img2 = tk.PhotoImage(file='image2.gif') self.img_label = tk.Label(master, image=self.img1) self.img_label.pack() self.button = tk.Button(master, text='Switch', command=self.switch_image) self.button.pack() def switch_image(self): if self.current_image == 1: self.img_label.config(image=self.img2) self.current_image = 2 else: self.img_label.config(image=self.img1) self.current_image = 1 class MainWindow: def __init__(self, master): self.master = master self.button = tk.Button(master, text='Open Child Window', command=self.open_child_window) self.button.pack() def open_child_window(self): top = tk.Toplevel(self.master) child = ChildWindow(top) root = tk.Tk() app = MainWindow(root) root.mainloop()
# 导入tkinter库,并将其重命名为tk
import tkinter as tk
# 定义一个ChildWindow类
class ChildWindow:
# 初始化函数,接收一个master参数
def __init__(self, master):
# 将master参数保存到self.master属性中
self.master = master
# 初始化当前显示的图片编号为1
self.current_image = 1
# 创建两个图片对象,分别对应image1.gif和image2.gif两个文件
self.img1 = tk.PhotoImage(file='image1.gif')
self.img2 = tk.PhotoImage(file='image2.gif')
# 创建一个Label组件,用于显示图片,初始显示img1
self.img_label = tk.Label(master, image=self.img1)
# 将Label组件添加到父容器中
self.img_label.pack()
# 创建一个Button组件,用于切换图片,点击时执行self.switch_image()函数
self.button = tk.Button(master, text='Switch', command=self.switch_image)
# 将Button组件添加到父容器中
self.button.pack()
# 切换图片的函数
def switch_image(self):
# 如果当前显示的是img1,则切换到img2
if self.current_image == 1:
self.img_label.config(image=self.img2)
self.current_image = 2
# 如果当前显示的是img2,则切换到img1
else:
self.img_label.config(image=self.img1)
self.current_image = 1
# 定义一个MainWindow类
class MainWindow:
# 初始化函数,接收一个master参数
def __init__(self, master):
# 将master参数保存到self.master属性中
self.master = master
# 创建一个Button组件,用于打开子窗口,点击时执行self.open_child_window()函数
self.button = tk.Button(master, text='Open Child Window', command=self.open_child_window)
# 将Button组件添加到父容器中
self.button.pack()
# 打开子窗口的函数
def open_child_window(self):
# 创建一个Toplevel组件,作为子窗口,父窗口为self.master
top = tk.Toplevel(self.master)
# 创建一个ChildWindow对象,传入子窗口作为master参数
child = ChildWindow(top)
# 创建一个Tk对象,作为程序的根窗口
root = tk.Tk()
# 创建一个MainWindow对象,传入根窗口作为master参数
app = MainWindow(root)
# 进入主事件循环
root.mainloop()
import tkinter as tk class App: def __init__(self, master=None): if master is None: master = tk.Tk() master.title("My App") master.geometry("400x300") self.master = master self.menu_bar = tk.Menu(self.master, tearoff=0) self.menu_bar.pack() self.create_menu() def create_menu(self): self.menu_bar.delete(1, tk.END) self.menu_bar.insert(tk.END, "Option") self.menu_bar.insert(tk.END, "Option") root = tk.Tk() app = App(root) root.mainloop() 报错self.tk.call(_tkinter.TclError: can't pack ".!menu": it's a top-level window
这个错误是因为你在menu_bar上使用了pack方法,而menu_bar是一个Menu对象,而Menu对象并不支持pack方法。你可以使用add_cascade方法将Menu对象添加到主菜单栏中,而不是使用pack方法。例如:
```
import tkinter as tk
class App:
def __init__(self, master=None):
if master is None:
master = tk.Tk()
master.title("My App")
master.geometry("400x300")
self.master = master
self.menu_bar = tk.Menu(self.master, tearoff=0)
self.master.config(menu=self.menu_bar) # 设置菜单栏
self.create_menu()
def create_menu(self):
option_menu = tk.Menu(self.menu_bar, tearoff=0)
option_menu.add_command(label="Option 1")
option_menu.add_command(label="Option 2")
self.menu_bar.add_cascade(label="Options", menu=option_menu)
root = tk.Tk()
app = App(root)
root.mainloop()
```
这个代码创建了一个菜单栏,并在菜单栏中添加了一个名为“Options”的菜单,菜单中包含两个选项“Option 1”和“Option 2”。注意,在这个例子中,我们使用了add_cascade方法将option_menu添加到了menu_bar中。