zoukankan      html  css  js  c++  java
  • python之《tkinter》

    1.创建窗口

    import tkinter as tk
    
    window = tk.Tk()
    window.title('my window')
    window.geometry('300x100')
    ----------------------
    # 你的其他部件
    ----------------------
    window.mainloop()

    这样我们一个窗口就形成了,接下来我们要为窗口添加一些部件

    在这里需要解释一下mainloop()这个函数,程序的运行是由上到下逐行运行的。当他运行到mainloop是就会卡住,等待你的动作例如你按下了button,他就会跳到button的函数执行,完毕后就会回到mainloop。我们可以形象的描述成,所有部件都生成了之后,mianloop就会监听这整个window上的变化,一旦有了操纵就会执行。

    2. label

    l = tk.Label(window, textvariable=var,font=('Arial', 12), bg='green', width=15, height=2)

    我们可以看见其中的参数(font 是字体, bg是背景, width和height是宽度和高度单位是字长)

    一般来说我们的label 的 text 是固定的 ,但是我们把label改成了textvariable之后就可以使用,tk的变量在后面改变值了。因为我们上面说了,mainloop会监听变化,但是label已经生成且没有外部操作(例如button和radiobutton可以接收外界控制),所有按理来说label的text是不会变的,我们想要让他变化就可以把text=改为textvariable=就可以接收变量了。但是这个变量什么随意一个变量,是需要我们提前定义的

    eg:

    var = tk.StringVar()

    需要注意,这个var一定要在使用的窗口生成之后生成,也就是 window = tk.Tk()的下面。

    最后我们需要把生成的label放到window上去

    l.pack()

    pack是从上往下放。

    3.button

    b = tk.Button(window, text='hit me', command = hit_me, width = 10, height = 3)

    button的第一个参数是这个button所在的窗口。 text是button上的提示信息,command是点击这个button之后执行的操作(函数)

    eg:

    hit_var = True
    def hit_me():
        global hit_var
        if hit_var == False:
            var.set('you hit me')
            hit_var = True
        else:
            hit_var = False
            var.set(' ')

    由于我们的tk变量不同,在tk里面变量存在class里面所以我们想给tk变量设置值的时候就需要

    var.set(" **")

    自然,在取text信息的时候

    a = var.get()

    即可

    最后pack() 一下就好了

    4.listbox

    listbox是一个菜单盒,里面提供了许多的选项

    var2 = tk.StringVar()
    var2.set(['wo', 'cao', 'ni', 'mei', '点我'])  # 列表传值
    ListBox = tk.Listbox(window, listvariable=var2)

    这样我们就给里面设置了初始值了。如果我们后面的操作需要改变里面的值我们还可以后期这样修改

    ListBox.insert('end', 'wocao')  # 选项传值往end传值
    ListBox.insert(1, 'first')  #在下标为1的地方插入一个insert
    ListBox.delete(1)  # 删除下标为1的var

    为listbox的值的增删都做好了那我们要如何获取到选中的值呢

    vale = ListBox.get(ListBox.curselection())

    这句话是get 鼠标选择的的text。

    也要记得pack哦

    5.Entry

    entry 是一个提供输入的框。

    e = tk.Entry(window)
    var = e.get()

    这样我们就可以获得entry里面的text了。

    6.text

    text是一个文本框

    t = tk.Text(window, height=2)

    我们在text里面插入字符串的时候可以

    t.insert('insert', var)
     t.insert('end', var)

    选择插入的模式插入end和insert(光标位置插入)

    7.radiobutton

    多个选项选一个 

    val = tk.StringVar()
    def point_choose():
        l.config(text='you choose:'+val.get())
    
    rb = tk.Radiobutton(window, text='Point A', variable=val, value='A', command=point_choose)
    rb.pack()
    rb2 = tk.Radiobutton(window, text='Point B', variable=val, value='B', command=point_choose)
    rb2.pack()

    这个radio button的大致意思是,把“A”存入其中,当选择了后把变量赋值给val 

    l.config可以冲置l里面的设置里面本身不能改变的参数

    8.scale

    scale尺度的意思

    s = tk.Scale(window, label='try me', from_=0, to=10, tickinterval=10, orient=tk.HORIZONTAL,
                 length=200, showvalue=0, resolution=0.01,
                 command=try_me)

    label是scale的标签, from_=0,to=10,是说范围从0到10刻度长度为10,

    需要注意的是scale会自动给command传递变量,也就是将当前的数值当作变量传入就去

    def try_me(v):
        print(v)

    9.checkbuton

    checkbutton是复式选项 可以选择多个

    cb1 = tk.Checkbutton(window, text='Python', variable=val, onvalue=1, offvalue=0, command=print_selection)
    cb2 = tk.Checkbutton(window, text='C++', variable=val2, onvalue=1, offvalue=0, command=print_selection)
    cb1.pack()
    cb2.pack()

    我们将变量val传入就去,当勾选了之后onvalue的值就会传给val,未勾选就会传入offvalue

    所以我们使用的话就可以

    def print_selection():
        if val.get() == 1 and val2.get() == 1:
            l.config(text='you like Python and C++')
            print(val,type(val),val2)
        elif val2.get() == 1 and val.get() == 0:
            l.config(text='you only like C++')
        elif val2.get() == 0 and val.get() == 1:
            l.config(text='you only like Python')
        else:
            l.config(text='you do not like anymore')

    象这样做一个判断语句了,因为只要点击的选项就会执行一次command的程序

    10.canvas

    canvas(画布)可以支持我们在上面作图,画正方形上面的,贴图什么的

    _canvas = tk.Canvas(window, bg='blue', height=100, width=200)
    _canvas.pack()

    这样我们就创建了一个画布,然后我们在画布上放一张图片试试看(貌似只能放GIF格式的)

    image_tk = tk.PhotoImage(file='ins.gif')
    image = _canvas.create_image(0, 0, anchor='nw', image=image_tk)

    接下来是画图

    rect = _canvas.create_rectangle(50, 50, 20, 20)
    line = canvas.create_line(x0, y0, x1, y1)
    oval = canvas.create_oval(x0, y0, x1, y1, fill='red')  #创建一个圆,填充色为`red`红色
    arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=180)  #创建一个扇形
    rect = canvas.create_rectangle(100, 30, 100+20, 30+20)   #创建一个矩形

    甚至我们还可以让图形移动

        _canvas.move(rect, 0, 2)  # 2是y 0 是x

    只要我们在加两个button,就可以做出交互了

    11.menubar

    menubar是菜单选项

    ##创建一个菜单栏,这里我们可以把他理解成一个容器,在窗口的上方
    menubar = tk.Menu(window)
    
    ##定义一个空菜单单元
    filemenu = tk.Menu(menubar, tearoff=0)
    
    ##将上面定义的空菜单命名为`File`,放在菜单栏中,就是装入那个容器中
    menubar.add_cascade(label='File', menu=filemenu)
    
    ##在`File`中加入`New`的小菜单,即我们平时看到的下拉菜单,每一个小菜单对应命令操作。
    ##如果点击这些单元, 就会触发`do_job`的功能
    filemenu.add_command(label='New', command=do_job)
    filemenu.add_command(label='Open', command=do_job)##同样的在`File`中加入`Open`小菜单
    filemenu.add_command(label='Save', command=do_job)##同样的在`File`中加入`Save`小菜单
    
    filemenu.add_separator()##这里就是一条分割线
    
    ##同样的在`File`中加入`Exit`小菜单,此处对应命令为`window.quit`
    filemenu.add_command(label='Exit', command=window.quit)

    12.messagebox

    首先我们需要在导入模块

    import tkinter as tk
    from tkinter import messagebox

    里面方法有

    tk.messagebox.showinfo(title='Hi', message='hahahaha')
    tk.messagebox.showinfo(title='',message='')#提示信息对话窗
    tk.messagebox.showwarning()#提出警告对话窗
    tk.messagebox.showerror()#提出错误对话窗
    tk.messagebox.askquestion()#询问选择对话窗
        print(tk.messagebox.askquestion())#返回yes和no
        print(tk.messagebox.askokcancel())#返回true和false
        print(tk.messagebox.askyesno())#返回true和false
        print(tk.messagebox.askretrycancel())#返回true和false

    开启另外一个窗口  因为这个在window上所有不需要mainloop

    student_data = tk.Toplevel(window)
    student_data.geometry('200x300')
    student_data.title('student')
  • 相关阅读:
    win 7 iis 的一些问题
    Google Maps JavaScript API V3 根据地址 加载地图
    ASP.NET 在程序中动态删除、修改配置文件节点值的方法
    Lambda 表达式的深化及使用
    NHibernate配置的总体流程
    Adobe Acrobat Automation和Aspose.Pdf添加文本印章和水印的对比
    如何导入Swagger文件到Eolinker
    接口文档规范
    对外接口安全性需要考虑什么?
    如何降低API文档对接成本
  • 原文地址:https://www.cnblogs.com/BookMiki/p/10327739.html
Copyright © 2011-2022 走看看