登录页面:
用户需要输入用户名和密码,如果输入正确则弹出提示信息“登录成功”,否则弹出“用户名或密码输入有误”的提示信息。
画板:
用户可以在画板上进行绘图,支持直线、箭头直线、矩形、画笔和橡皮擦等功能。用户可以选择颜色,也可以使用快捷键切换颜色。画板的背景色为白色,初始画笔颜色为黑色。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
from tkinter import *
from tkinter.messagebox import *
# 设置主界面的容器大小和位置
root = Tk()
root.title('登录页面')
root.geometry("800x400+100+150")
#声明组件变量
log_name = StringVar()
log_pwd = StringVar()
#组件的使用
def btn_login():
if log_name.get() == '浔川画板' and log_pwd.get() == '123456':
showinfo('提示信息','登录成功,请点击"退出"前进')
else:
showwarning('提示信息','用户名或密码输入有误~')
#组件的使用
Label(root,text='账号:',font=('幼圆',20)).place(x=200,y=80)
Entry(width=27,font=('幼圆',20),textvariable=log_name).place(x=280,y=88)
Label(root,text='密码:',font=('幼圆',20)).place(x=200,y=150)
Entry(width=27,font=('幼圆',20),show='*',textvariable=log_pwd).place(x=280,y=150)
Button(text='登录',
background='white', # 背景色
foreground='black',width=15, # 前景色
font=('幼圆',20), #字体 大小
command=btn_login).place(x=150,y=220)
Button(text='退出',
background='white', # 背景色
foreground='black', # 前景色
width=15,font=('幼圆',20), #字体 大小
command=lambda:root.quit()).place(x=400,y=220)
# 显示图形界面
root.mainloop()
#画板
from tkinter import *
from tkinter.colorchooser import askcolor
import time
win_width = 1200
win_height = 750
bgcolor = 'white'
print("画笔初始颜色为黑色.")
print("橡皮擦要先点橡皮擦再点画笔用哦!")
time.sleep(1)
class Application(Frame):
"""一个经典的GUI写法"""
def __init__(self, master=None):
"""初始化方法"""
super().__init__(master) # 调用父类的初始化方法
self.x = 0
self.y = 0
self.fgcolor = "black"
self.lastdraw = 0
self.start_flag = False
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
"""创建画图区域"""
self.drawpad = Canvas(self, width=win_width, height=win_height, bg=bgcolor)
self.drawpad.pack()
# 创建按钮
self.btn_start = Button(self, name='start', text='开始')
self.btn_start.pack(side='left', padx=50)
self.btn_pen = Button(self, name='pen', text='画笔')
self.btn_pen.pack(side='left', padx=50)
self.btn_rect = Button(self, name='rect', text='矩形')
self.btn_rect.pack(side='left', padx=50)
self.btn_clear = Button(self, name='clear', text='清屏')
self.btn_clear.pack(side='left', padx=50)
self.btn_erasor = Button(self, name='erasor', text='橡皮擦')
self.btn_erasor.pack(side='left', padx=50)
self.btn_line = Button(self, name='line', text='直线')
self.btn_line.pack(side='left', padx=50)
self.btn_line_arrow = Button(self, name='line_arrow', text='箭头直线')
self.btn_line_arrow.pack(side='left', padx=50)
self.btn_color = Button(self, name='color', text='颜色')
self.btn_color.pack(side='left', padx=50)
# 绑定事件
self.btn_line.bind('<Button-1>', self.eventManager) # 点击按钮事件
self.btn_line_arrow.bind('<Button-1>', self.eventManager) # 点击按钮事件
self.btn_rect.bind('<Button-1>', self.eventManager) # 点击按钮事件
self.btn_pen.bind('<Button-1>', self.eventManager) # 点击按钮事件
self.btn_erasor.bind('<Button-1>', self.eventManager) # 点击按钮事件
self.btn_clear.bind('<Button-1>', self.eventManager) # 点击按钮事件
self.btn_color.bind('<Button-1>', self.eventManager) # 点击按钮事件
self.master.bind('<KeyPress-r>', self.hotKey) # 绑定快捷键
self.master.bind('<KeyPress-g>', self.hotKey) # 绑定快捷键
self.master.bind('<KeyPress-b>', self.hotKey) # 绑定快捷键
self.master.bind('<KeyPress-y>', self.hotKey) # 绑定快捷键
self.drawpad.bind('<ButtonRelease-1>', self.stopDraw) # 左键释放按钮
def eventManager(self, event):
name = event.widget.winfo_name()
print(name)
self.start_flag = True
if name == 'line':
# 左键拖动
self.drawpad.bind('<B1-Motion>', self.myline)
elif name == 'line_arrow':
self.drawpad.bind('<B1-Motion>', self.myline_arrow)
elif name == 'rect':
self.drawpad.bind('<B1-Motion>', self.myrect)
elif name == 'pen':
self.drawpad.bind('<B1-Motion>', self.mypen)
elif name == 'erasor':
self.drawpad.bind('<B1-Motion>', self.myerasor)
elif name == 'clear':
self.drawpad.delete('all')
elif name == 'color':
c = askcolor(color=self.fgcolor, title='请选择颜色')
print(c) # c的值 ((128.5, 255.99609375, 0.0), '#80ff00')
self.fgcolor = c[1]
def startDraw(self, event):
self.drawpad.delete(self.lastdraw)
if self.start_flag:
self.start_flag = False
self.x = event.x
self.y = event.y
def stopDraw(self, event):
self.start_flag = True
self.lastdraw = 0
def myline(self, event):
self.startDraw(event)
self.lastdraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
def myline_arrow(self, event):
self.startDraw(event)
self.lastdraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, arrow=LAST, fill=self.fgcolor)
def myrect(self, event):
self.startDraw(event)
self.lastdraw = self.drawpad.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor)
def mypen(self, event):
self.startDraw(event)
print('self.x=', self.x, ',self.y=', self.y)
self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
self.x = event.x
self.y = event.y
def myerasor(self, event):
self.fgcolor = "white"
def hotKey(self, event):
c = event.char
if c == 'r':
self.fgcolor = 'red'
elif c == 'g':
self.fgcolor = 'green'
elif c == 'b':
self.fgcolor = 'blue'
elif c == 'y':
self.fgcolor = 'yellow'
if __name__ == '__main__':
root = Tk()
root.title('浔川python社画板')
root.geometry('1200x1000+400+400')
app = Application(master=root)
root.mainloop()