"""尚学堂学习笔记,复习用"""

通过面向对象的写法编写GUI程序

 组件的常见属性

操纵组件和组件属性编写简易的登录界面:

操作代码

 运行结果:

变量绑定相关操作:

 text文本框应用实例代码:

 效果:

单选按钮:Radiobutton

#通过StringVar()对象实现变量绑定进而动态输出选择的信息self.v = StringVar()self.r1 = Radiobutton(self, text = "男性", value = "M", variable = self.v)self.r2 = Radiobutton(self, text = "女性", value = "F", variable = self.v)self.r1.pack(side = "left")self.r2.pack(side = "left")Button(self, text = "确定", command = self.confirm).pack(side = "left")def confirm(self):messagebox.showinfo("测试", "选择的性别:" + self.v.get())

多选按钮:Checkbutton

    self.codeHobby = IntVar()self.videoHobby = IntVar()print(self.codeHobby.get)self.c1 = Checkbutton(self, text = "敲代码", Variable = self.codeHobby,onvalue = 1, offvalue = 0)self.c2 = Checkbutton(self, text = "看视频", Varialbe = self.videoHobby,onvalue = 1, offvalue = 0)self.c1.pack(side = "left")self.c2.pack(side = "left")Button(self, text = "确定", command = self.confirm).pack(self = "left")def confirm(self):if self.videoHobby.get() == 1:messagebox.showinfo("测试", "看视屏———")if self.codeHobby.get() == 1:messagebox.showinfo("测试", "程序猿————")

canvas组件:

def createWidget(self):self.canvas = Canvas(self, width = 300, height = 200, bg = "green")self.canvas.pack()line = self.canvas.create_line(10, 10, 30, 20, 40, 50)rect = self.canvas.create_rectangle(50, 50, 100, 100)oval = self.canvas.create_oval(50, 50, 100, 100)global photophoto = PhotoImage(file = "图片路径")self.canvas.create_image(150, 170, image = photo)Button(self, text = "画10个矩形", command = self.draw10Rec).pack(self = "left")def draw10Rec:for i in range(10)x1 = random.randrange(int(self.canvas["width"]) / 2)y1 = random.randrange(int(self.canvas["height"]) / 2)x2 = x1 + random.randrange(int(self.canvas["width"] / 2))y2 = y1 + random.randrange(int(self.canvas["height"]) / 2)self.canvas.create_rectange(x1, y1, x2, y2)

 通过girp布局登录界面:

def createWidget(self):self.label01 = Label(self, text = "用户名")self.label01.grid(row = 0, column = 0)self.entry01 = Entry(self)self.entry01.grid(row = 0, column = 1)Label(self, text = "用户名为手机号").grid(row = 0, column = 2)Label(self, text = "密码").grid(row = 1, column = 0)Entry(self, show = "*").grid(row = 1, column = 1)Button(self, text = "登录").grid(row = 2, column = 1, sticky = EW)BUtton(self, text = "取消").grid(row = 2, column = 2, sticky = E)

布局计算机界面:

def createWidget(self):btnText = (("MC", "M+", "M-", "MR"),("C", "±", "/", "×")(7, 8, 9, "-"),(4, 5, 6, "+"),(1, 2, 3, "="),(0, "."))Entry(self).gird(row = 0, column = 0, columnspan = 4, pady = 10)for rindex, r in enumerate(btnText):for cindex, c in enumerate(r):if c == "=":Button(self, text = c, width = 2)\.grid(row = rindex + 1, column = cindex, rowspan = 2, sticky = NSEW)elif c == 0:Button(self, text = c, width = 2)\.grid(row = rindex + 1, column = cindex, columnspan = 2, sticky = NSEW)elif c == ".":Button(self, text = c, width = 2)\.grid(row = rindex + 1, column = cindex + 1, sticky = NSEW) else:Button(self, text = c, width = 2)\.grid(row = rindex + 1, column = cindex, sticky = NSEW)      

通过pack布局界面

 pack实现钢琴界面布局

from tkinter import *root = Tk()
root.geometry("700x220")f1 = Frame(root)
f1.pack()
f2 = Frame(root)
f2.pack()btnText("流行风", "中国风", "古风", "重金属", "轻音乐")for txt in btnText:Button(f1, text= txt).pack(side = "left", padx = "10")for i in range(1, 13):Label(f2, width = 5, height = 10, borderwidth = 1, relief = "solid",bg = "black" if i % 2 == 0 else "white").pack(side = "left, padx = "2")root.mainloop()

 通过place布局界面

 案例

# coding=utf-8from tkinter import *root = Tk(); root.geometry("500x300")
root.title("布局管理place"); root["bg"] = "white"f1 = Frame(root, width = 200, height = 200, bg = "green")
f1.place(x = 30, y = 30)#当relx和x同时存在时,x表示偏移量
Button(root, text = "江西理工大学").place(relx = 0.2, x = 100, y = 20, relwidth = 0.2,relheight = 0.5)
Button(f1, text = "信息工程学院").place(relx = 0.6, rely = 0.7)
Button(f1, text = "学生").place(relx = 0.5, rely = 0.2)root.mainloop()

 事件机制

lambda表达式在组件command中进行传参

 三种事件绑定

选择菜单(OptionMenu)

滑块(Scale)

 颜色框

文件选择框

简单对话框

 通用消息框

 ttk子模块

用pyinstall可以将文件打包成可执行文件(.exe, 将文件和python解释器打包)

 画图软件:

from tkinter import *
from tkinter.colorchooser import *  # 选择颜色的组件class Application(Frame):  # 继承自Frame组件,直接在Frame组件中增加子组件def __init__(self, master=None):  # 绑定根窗口super().__init__(master)self.master = masterself.pack()# 添加一些需要使用的属性self.st_draw = Falseself.last_draw = 0self.x = 0self.y = 0self.fg_color = "#ff0000"self.canvas_width = 900; self.canvas_height = 450; self.canvas_color = "#000000"# 调用创造子组件的方法self.createWidget()def createWidget(self):self.my_canvas = Canvas(root, width=self.canvas_width, height=self.canvas_height*0.9, bg=self.canvas_color)self.my_canvas.pack()my_start = Button(root, text="开始", name="start")my_start.pack(side="left", padx=10)my_pen = Button(root, text="画笔", name="pen")my_pen.pack(side="left", padx=10)my_rect = Button(root, text="矩形", name="rect")my_rect.pack(side="left", padx=10)my_clear = Button(root, text="清屏", name="clear")my_clear.pack(side="left", padx=10)my_eraser = Button(root, text="橡皮擦", name="eraser")my_eraser.pack(side="left", padx=10)my_line = Button(root, text="直线", name="line")my_line.pack(side="left", padx=10)my_lineArrow = Button(root, text="箭头直线", name="lineArrow")my_lineArrow.pack(side="left", padx=10)my_color = Button(root, text="颜色", name="color")my_color.pack(side="left", padx=10)# 绑定事件self.my_canvas.bind("<ButtonRelease-1>", self.stopDraw)my_pen.bind_class("Button", "<1>", self.eventManager)# 增加颜色切换的快捷键root.bind("<KeyPress-r>", self.kuaijiejian)root.bind("<KeyPress-g>", self.kuaijiejian)root.bind("<KeyPress-b>", self.kuaijiejian)# 管理事件def eventManager(self, event):name = event.widget.winfo_name()print(name)if name == "line":self.my_canvas.bind("<B1-Motion>", self.myline)elif name == "lineArrow":self.my_canvas.bind("<B1-Motion>", self.mylineArrow)elif name == "rect":self.my_canvas.bind("<B1-Motion>", self.my_rect)elif name == "pen":self.my_canvas.bind("<B1-Motion>", self.my_pen)elif name == "eraser":self.my_canvas.bind("<B1-Motion>", self.my_eraser)elif name == "clear":self.my_canvas.delete("all")elif name == "color":c = askcolor(color=self.fg_color, title="选择画笔颜色")self.fg_color = c[1]# 定义子组件功能def stopDraw(self, event):self.st_draw = Falseself.last_draw = Falsedef startDraw(self, event):self.my_canvas.delete(self.last_draw)if not self.st_draw:self.st_draw = Trueself.x = event.xself.y = event.ydef myline(self, event):self.startDraw(event)self.last_draw = self.my_canvas.create_line(self.x, self.y, event.x, event.y, fill=self.fg_color)def mylineArrow(self, event):self.startDraw(event)self.last_draw = self.my_canvas.create_line(self.x, self.y, event.x, event.y, arrow=LAST, fill=self.fg_color)def my_rect(self, event):self.startDraw(event)self.last_draw = self.my_canvas.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fg_color)def my_pen(self, event):self.startDraw(event)self.my_canvas.create_line(self.x, self.y, event.x, event.y, fill=self.fg_color)self.x = event.xself.y = event.ydef my_eraser(self, event):self.startDraw(event)self.my_canvas.create_rectangle(event.x-4,event.y-4,event.x+4,event.y+4,fill=self.canvas_color)def kuaijiejian(self, event):if event.char == 'r':self.fg_color = "#ff0000"elif event.char == 'g':self.fg_color = "#00ff00"elif event.char == 'b':self.fg_color = '#0000ff'if __name__ == "__main__":root = Tk()  # 根窗口root.title("画图软件")  # 根窗口的标题app = Application(master=root)  # 创建app对象,app对象的父组件为rootroot.geometry(str(app.canvas_width) + 'x' + str(app.canvas_height) + "+400+200")  # 跟窗口大小为画布大小,离左屏幕400,上屏幕200root.mainloop()  # 不断进行事件循环

python-GUI编程相关推荐

  1. Python GUI编程-了解相关技术[整理]

    Python GUI编程-了解相关技术[整理] 我们可以看到,其实python进行GUI开发并没有自身的相关库,而是借用第三方库进行开发.tkinter是tcl/tk相关,pyGTK是Gtk相关,wx ...

  2. Python gui编程pyQt5安装步骤

    Python gui编程pyQt5安装步骤 =============================== -m PyQt5.uic.pyuic  $FileName$ -o $FileNameWit ...

  3. Python GUI编程(Tkinter)笔记

    Python GUI编程Tkinter笔记 1 显示任意格式图片 2 固定框架Frame大小 3 选择文件夹或文件 4 展示菜单栏 5 展示选择的图片 1 显示任意格式图片 Tkinter只支持显示G ...

  4. linux 移除python_第16 p,PYthon中的用户交互,Python GUI编程

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第16篇文章,第二阶段的课程:Python基础知识:PYthon中的用户交互.Python GUI编程实现方式介绍. 学习本课程,建 ...

  5. Eel+VUE python GUI编程

    Eel+VUE python GUI编程 python GUI编程 python GUI编程 Eel 是一个轻量的 Python 库,用于制作简单的类似于离线 HTML/JS GUI 应用程序,并具有 ...

  6. Python GUI编程(Tk)--聊天窗口--键盘值查询

    1 界面设计和实现过程 ■ 界面布局设计 ■ 创建所需控件 ■ 设定事件和命令相应 ■ 对控件进行布局 ■ 完成程序代码 详细的介绍可参考 书籍:<Python GUI Programming ...

  7. Python GUI编程:将自己写的postman打包成exe可执行文件

    通过前面几个章节的文章,我们学会了通过PySide2去编写一个简单的GUI页面测试小工具: Python GUI编程:PySide2介绍 Python GUI编程:如何运行第一个PySide2的窗体程 ...

  8. python程序画漂亮图_存储五彩画笔绘制的漂亮简笔画的Python实现(Python GUI编程)...

    上几篇文章我们创建了一个Python画笔类,并对画笔类进行完善,可以定义画笔的大小和颜色信息.今天,我们编程实现将画笔画出的内容保存在本地的功能. 要实现将画笔在Canvas上绘制的内容保存在本地的功 ...

  9. Python GUI编程--Tkinter

    今天看到了GUI编程,书上推荐用wxPython,去官网上看了看,发现Windows的最高支持到2.7,我用的是3.4版本,咋办,用自带的库--Tkinter呗,它是Python的默认GUI库,几乎是 ...

  10. python gui编程框架添加工具栏_Python之GUI实现

    用到了python的GUI包:wxpython 一. wxPython是Python的GUI图形库.很方便的创建完整的.功能键全的GUI用户界面. wxPython是作为wxWidgets的Pytho ...

最新文章

  1. jQuery 原理的模拟代码 -4 重要的扩展函数 extend
  2. SIGMOD回顾:数据库国际大咖组团来阿里,他们都说了啥?
  3. 牛客 - Sumo and Easy Sum(推公式+数学)
  4. drools。drools_Drools:fireAllRules,fireUntilHalt和Timers内部代码清理的详细说明
  5. java文本域 图片_java swing中给面板或者文本域设置背景图片的方法!
  6. Your Potential. Our Passion
  7. html禁止页面动画,如何在页面加载时阻止CSS动画?
  8. python连接sql sever_R和python连接SQL sever 数据库操作
  9. python绘制缓和曲线_CAD绘制缓和曲线说明
  10. python逆时针旋转矩阵_由外向内顺时针逆时针旋转矩阵
  11. 苹果 iPad 上如何设置和使用蓝牙鼠标?
  12. WORD中页码变成一样
  13. js实现学生信息表案例--详细教程
  14. 渐变:线性渐变、径向渐变
  15. 【Argoverse 1 Motion Forecasting Dataset】轨迹预测数据集简介
  16. 南宁职业技术学院计算机专业宿舍,南宁职业技术学院星级文明宿舍评比办法(试行)...
  17. Yeelight LED智能灯泡(彩光版)代码控制(含pdf资料)
  18. 钱多多软件第二阶段冲刺1
  19. DICOM:基于JMeter+dcm4che2测试PACS服务器性能的解决方案(前篇)
  20. 新能源汽车,视频云及半导体产业链市场格局分析

热门文章

  1. 机箱硬盘指示灯不亮_拒绝光污染,不要噪音,这款机箱绝对能帮到你
  2. 计算机开机内存占用80%,Win10开机后内存占用高80%以上怎么办_win10电脑开机内存占用高达80%以上如何解决...
  3. linux dev目录 mnt,linux中mnt,media以及dev目录的区别
  4. SimpleFOC之ESP32(六)—— 双电机控制
  5. 淘宝难做, 独立网店是趋势
  6. 分享112个助理类简历模板,总有一款适合您
  7. java string 字节_java中string究竟占多少字节
  8. 力扣 -- 174. 地下城游戏
  9. python for if
  10. java学习笔记29--数组