python基础学习(八)

目录

GUI图形用户编程(二)

Tkinter中常见用法

常见选项汇总

常见组件

Button

Entry单行文本框

Text多行文本框

Radiobutton单选按钮

canvas画布

布局管理器

grid布局管理器

pack布局管理器

place布局管理器


GUI图形用户编程(二)

Tkinter中常见用法

常见选项汇总

选项名(别名)含义
activebackground指定组件处于激活状态时的背景色
activeforeground指定组件处于激活状态时的前景色
background(bg)指定组件正常显示时的背景色
borderwidth指定组件正常显示时的3D边框的宽度,该值可以是Tk—GetPixeis接受的任何格式
cursor指定光标在组件上的样式,该值可以是Tk—GetCursors接受的任何格式
disabledforeground指定组件处于禁用状态时的前景色
font指定组件上显示的文本字体
foreground(fg)指定组件正常显示时的前景色
highlightcolor指定组件在高亮状况下的前景色
highlightbackground指定组件在高亮状态下的beijingse
highlightthickness指定组件在高亮状态下的周围方形区域的宽度,该值可以是Tk—GetPixeis接受的任何格式
height指定组件的高度,以font选项指定的字体的字符高度为单位,至少为1
image指定组件的显示的图片,若设置了image选项,它将会覆盖text、bitmap选项
justify指定组件内部内容的对齐方式,该选项支持LEFT(左对齐)、CENTER(居中对齐)、RIGHT(右对齐)这三个值
padx指定组件内部在水平方向上两边的空白,该值可以是Tk—GetPixeis接受的任何格式
pady指定组件内部在垂直方向上两边的空白,该值可以是Tk—GetPixeis接受的任何格式
relief指定组件的3D效果,该值指出组件内部相对于外部的外观样式
selectbackground指定组件在选中状态下的背景色
selectborderwidth指定组件在选中状态下的3D边框的宽度,该值可以是Tk—GetPixeis接受的任何格式
state指定组件的当前状态,该选项支持NORMAL(正常)、DISABLE(禁用)这两个值
takefocus指定组件在键盘遍历(Tab或Shift +Tab)时是否接受焦点,将该选项设为1为接受焦点,设为0则为不接收焦点
text指定组件上显示的文本,文本显示格式由组件本身、anchor及justify选项决定
textvariable指定一个变量名,GUI组件负责显示该变量值转换得到的字符串,文本显示格式由组件本身、anchor及justify选项决定
underline指定为组件文本的第几个字符添加下划线,该选项就相对于为组件绑定了下划线
width指定组件的宽度,以font选项指定的字体的字符高度为单位,至少为1
wraplength对于能支持字符换行的组件,该选项指定每行显示的最大字符数,超过该数量的字符将会转到下行显示
xscrollcommand通常用于将组件的水平滚动改变(包括内容滚动或宽度发生改变)与水平滚动条的set方法关联,从而让组件的水平滚动改变传递到水平滚动条
yscrollcommand通常用于将组件的垂直滚动改变(包括内容滚动或宽度发生改变)与水平滚动条的set方法关联,从而让组件的垂直滚动改变传递到水平滚动条

常见组件

Button

Button(按钮)用来执行用户的单击操作。Button可以包含文本,也可以包含图像。按钮被单击后会自动调用对应事件绑定的方法。

Entry单行文本框

Entry用来接收一行字符串的控件。如果用户输入的文字长度长于Entry控件的宽度时,文字会自动向后滚动,如果想输入多行文本,需要使用Text控件

Text多行文本框

Text(多行文本框)主要用于显示多行文本,还可以显示网络链接、图片、HTML页面、甚至css样式表、添加组件等。也常被用来做简单的文本处理器、文本编辑器或者网页浏览器来使用。比如IDLE就是Text组件构成的。

Radiobutton单选按钮

Radiobutton控件用于选择同一个单选按钮中的一个。

Radiobutton可以显示文本,也可以显示图像。

canvas画布

canvas(画布)是一个矩形区域,可以放置图形、图像、组件等。

例题:

from tkinter import *
from tkinter import messagebox


class Application(Frame):
    """一个经典的GUI程序类的写法"""

    def __init__(self, master=None):
        super().__init__(master)         # super()代表的是父类的定义,而不是父类对象
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """创建组件"""
        self.bnt = Button(self, text="登录", command=self.login)
        self.bnt.pack()

    def login(self):
        messagebox.showinfo("Python基础学习", "登录成功!!!开启学习之旅!!!")


if __name__ == "__main__":
    root = Tk()
    root.geometry("600x700+200+300")
    app = Application(master=root)
    root.mainloop()

布局管理器

Tkinter提供了三种管理器:pack、grid、place。

grid布局管理器

grid表格管理器,采用表格结构组织组件,子组件的位置由行和列的单元格来确定,并且可以跨行和跨列,从而实现复杂的布局。

grid()方法提供选项:

选项说明取值范围
column单元格的列号从0开始的正整数
columnspan跨列或跨越的列数正整数
row单元格的行号从0开始的正整数
rowspan跨行或跨越的行数正整数
ipadx,ipady设置子组件之间的间隔。x方向或y方向,默认单位为像素非负浮点数,默认0.0
padx、pady与之并列的组件之间的间隔,x方向或y方向,默认单位为像素非负浮点数,默认0.0
sticky组件紧贴所在单元格的某一角,对应于东南西北中依旧4个角“n”,“s”,“w”,“e”,“nw”,“sw”,“se”,“ne”,“center”

用grid()方法设计计算机界面

from tkinter import *

class Application(Frame):
    """一个经典的GUI程序类的写法"""

    def __init__(self, master=None):
        super().__init__(master)         # super()代表的是父类的定义,而不是父类对象
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """用grid设计计算机界面"""
        Entry(self).grid(row=0,column=0,columnspan=4,pady=10)
        bntText=(("MC", "M+", "M-", "MR"),("C", "±", "÷", "×"),(7, 8, 9, "-"),(4, 5, 6,"+"),(1, 2, 3, "="),(0,"."))
        for rindex,r in enumerate(bntText):
            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=EW)
                else:
                    Button(self,text=c,width=2).grid(row=rindex+1,column=cindex,sticky=EW)

                    
if __name__ == "__main__":
    root = Tk()
    root.geometry("150x250+200+300")
    app = Application(master=root)
    root.mainloop()

计算机界面效果:

pack布局管理器

pack按照组件创建顺序将子组件添加到父组件中去,按照垂直或者水平的方向自然排布。如果不指定任何选项,默认在负组件中自顶而下垂直添加组件。

pack是代码最少,最简单的一种,可用于快速生成界面

pack()方法提供选项:

名称描述取值范围
expand当值为“yes”时,side选项无效,组件显示在父配件中心位置,若fill选项为“both”,ze填充父组件的剩余空间“yes”,自然数,“no”,0(默认值:“no”或0)
fill填充x(y)方向上的空间,当side=“top”或“bottom”时,填充x方向;当side=“left”或“right”时,填充“y”方向;当expand选项为“yes”时,填充父组件的剩余空间“x”,“y”,“both”,“none”(默认值:none)
ipadx,ipady设置子组件间的间隔,x方向或y方向,默认单位为像素非负浮点数,默认0.0
padx,pady与之并列的组件之间的间隔,x方向或y方向,默认单位为像素非负浮点数,默认0.0
side定义停靠在夫组建的哪一边上“top”,“bottom”,“left”,“right”(默认:top)
before将本组件与所选组件之前pack,类似于先创建本组件在创建选定组件已经pack后的组件对象
after将本组件与所选组件之后pack,类似于先创建选定组件在创建本组件已经pack后的组件对象
in—将本组件作为所选组件对象的子组件,类似于指定本组件的master为选定组件已经pack后的组件对象
anchor对齐方式,左对齐“w”,右对齐“e”,顶对齐“n”,底对齐“s”“n”,“s”,“w”,“e”,“nw”,“sw”,“se”,“ne”,“center”(默认)

用pack()方法设计简易钢琴软件界面

from tkinter import *

root=Tk()
root.geometry("700x220")

#Frame是一个矩形区域,就是用来放置其他子组件
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,20):
    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布局管理器

place布局管理器可通过坐标精准控制组件的位置,适用于一些布局更加灵活的场景。

place()方法的选项:

选项说明取值范围
x,y组件左上角的绝对坐标(相对于窗口)非负整数 x和y选项用于设置偏移(像素),如果同时设置relx(rely)和x(y),那么place将优先计算relx和rely,然后在实现x和y指定的偏移量
relx,rely组件组上角的坐标(相对于父容器)relx是相对于父组件的位置,0是最左边,0.5是正中间,1是最右边; rely是相对于父组件的位置。0是最上边,0.5是正中间,1是最下边。
width,height组件的宽度和高度非负整数
relwidth,relheight组件的宽度和高(相对于父容器)与relx,rely取值类似,但是相对于父组件的尺寸
anchor对齐方式,左对齐“w”,右对齐“e”,顶对齐“n”,底对齐“s”“n”,“s”,“w”,“e”,“nw”,“sw”,“se”,“ne”,“center”(默认)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

And ν

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值