GUI图形界面

527 阅读4分钟

导入tkinter

  • import tkinter as tk
  • from tkinter import *

Lable

l = tk.Label(master,text,bg,font(,),width,height) #主体,输出,背景颜色,字体和大小,宽度,高度

import tkinter as tk

window = tk.TK()    #创建窗口
window.title("my first window")
window.geometry('200x100')    #长x高

l = tk.Label(window,text = 'OMG!this is iceer!',bg = 'green', font("Arial",15),width=20,height=2)
#font为字体

l.pack()
#安置标签还可:l.place()

window.mainloop()

Button

import tkinter as tk

window = tk.Tk()
window.title("window")
window.geometry('180x60')

var = tk.StringVar()
# tkinter.StringVar保持值的变更随时显示在界面上

#text 应改而使用textvariable
l = tk.Label(window,textvariable = var ,bg = '#FCE4EC', font('Arial',12),width = 18, height = 2)

l.pack()

on_hit = False
#全局变量,标记当前状态,控制lable显示或者不显示

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


b = tk.Button(window,text = 'hit me',bg = '#F8BBD0',width = 15,height = 1,command = hit_me)

b.pack()

window.mainloop()#不断刷新

-打开窗口是Label空白

  • 点击Button hit me

entry$text

import tkinter as tk

window = tk.Tk()
window.title("enter$text")
window.geometry("200x200")

e = tk.Entry(window,show = Node,bg = '#FCE4EC')
e.pack()

def insert_point():
    var = e.get()
    t.insert('insert',var)

def insert_end():
    var = e.get()
    t.insert('end',var)
#insert 可以到指定位置
#比如 t.insert(1.1,var)   行从1开始列从0开始?

b1 = tk.Button(window,text = 'insert point',weight = 15,bg = '#F48FB1',command = insert_point)
b1.pack()

b2 = tk.Button(window,text = 'insert point',weight = 15,bg = '#F48FB1',command = insert_end)
b2.pack()

t = tk.Text(window,height = 2, bg = 'FCE4EC')
t.pack()

#不需要mainloop()也可以重复执行?

  • 点击insert point,输入内容会输出到text光标处

  • 点击 insert end,会输出到text的最末

  • tk.Entry(show = '*')

  • little trick:show = ‘’输入其他符号, 假装中毒输入啥都显示一样

Listbox 列表控件

import tkinter as tk

window = tk.Tk()
window.title("listbox")
window.geometry("200x200")

varl = tk.StringVar()

l = tk.Label(window,bg = "#0097A7",width=12,textvariable = var1)
l.pack()

def print_selection():
    value = lb.get(lb.curselection())
    varl.set(value)
    #不需要声明全局变量?

b = tk.Buton(window,text = 'print selection',width = 15,commad = print_selection)
b.pack()

var2 = tk.StringVar()
var2.set(('NGC 2936','IRAS','NCGC 6537'))
#set只需要输入一个参数,设定初始值时有多个元素需要用括号括起来

lb = tk.Listbox(window,listvariable = var2, bg = '#00ACC1')

list_items = [1047,'BPM']
for item in list_items:
    lb.insert('end',item)
    
lb.inster(1,'IC101')
lb.insert(2,'世界上最孤独的鲸鱼')
lb.delete(2)    #删除元素

Radiobutton 选择按钮

  • tkiter.Radiobutton(master,text = '',variable,value,command = ..) #选择此选项时value传递给variable
  • config()可以改变label的参数
import tkinter as tk
window = tk.Tk()
window.title("radiobutton")
window.geometry('200x200')

l = tk.Lable(window,text = 'empty',bg = '#A5D6A7',width = 12)
l.pack()

def print_selection():
    l.config(text = 'you have selected' + var.get())
    #config可以改变label的参数

#选择Option A时,赋‘A’值给变量‘var’
r1 = tk.Radiobutton(window,text = "Option A",variable = var, value = 'A',command = print_selection)
r1.pack()

r2 = tk.Radiobutton(window,text = "Option B",variable = var, value = 'B',command = print_selection)
r2.pack()

r3 = tk.Radiobutton(window,text = "Option C",variable = var, value = 'C',command = print_selection)
r3.pack()

window.mainloop()

checkbutton 勾选项

  • Radiobutton只能选定其中一个值,checkbutton可以勾选多个值
  • tkinter.Checkbutton(master,text='',variable='',onvalue = 1, command = ..) #选定就是打开onvalue,不选定就是offvalue=0
import tkinter as tk

window = tk.Tk()
window.title("checkbutton")
window.geometry('250x120')

l = tk.Label(window,width = 30,bg = '#40C4FF',text = 'empty')
l.pack()

def print_selection():
    if(var1.get()== 1)&(var2.get()==0):
        l.config(text = '52赫兹叫声')
    elif(var1.get()== 0)&(var2.get()==1):
        l.config(text = '从前有只鲸鱼叫ALice')
    elif(var1.get()== 0)&(var2.get()==0):
        l.cofig(text='')
    else:
        l.config(text = '从前有只鲸鱼叫ALice,没人听见她唱歌')
    
var1 = tk.IntVar()
var2 = tk.IntVar()

c1 = tk.Checkbutton(window,text = '52hz',variable = var1,onvalue = 1,command = print_selection)
c1.pack()

c2 = tk.Checkbutton(window,text = 'Alice',variable = var2,onvalue = 1,command = print_selection)
c2.pack()

scale 尺度

  • tkinter.Scale(master,label,from_,to,orient,showvalue,tickinterval,command)
import tkinter as tk

window = tk.Tk()
window.title("scale")
window.geometry('200x200')

l = tk.Label(window,text = 'emptey',width = 20,by = '#FFEE58')
l.pack()

def print_selection(v):
    l.config(text = 'you have selected'+v)
    #v是from_吗?

s = tk.Scale(window,label = 'try me',from_ = 7,to = 11,orient = tk.HORIZONTAL,length = 200,showvalue=0,tickinterval=2,command = print_selection)
#lenth像素,orinent为排版方式,HORIZONTAL表示横向,tickinterval为标签单位长度,resolution为精确度
s.pack()

Canvas 画布

 import tkinter as tk
 
 window = tk.Tk()
 window.title('my window')
 window.geometry('200x200')

canvas = tk.Canvas(window,bg = '#00838F',height = 100,width=200)
image_file=tk.PhotoImage(file='xxx.')
image=canvas.creat_image(0,0,anchor='nw',imge_file)       #图片放的点位,nw就是northwest

canvas.pack()

b=tk.Butthon(window,text='move',command=moveit).pack()

 window.mainloop()
 

Menubar 菜单

  • .add_cascade()添加到主菜单
  • .add_command()
 import tkinter as tk
 
 window = tk.Tk()
 window.title('menubar')
 window.geometry('200x200')
 
 l = tk.Label(window,text='',bg = '#00838F')
 l.pack()
 
 counter = 0
 def do_job():
    global counter 
    l.config(text='do'+str(counter))
    #把整数形式转化为字符串
    counter += 1
    
 menubar = tk.Menu(window)
 filemenu = tk.Menu(menubar,tearoff=0)
 menubar.add_cascade(label='File',menu = filemenu)
 filemenu.add_command(label='New',command = do_job)
 filemenu.add_command(label='Open',command = do_job)
 filemenu.add_command(label='Save',command = do_job)
 filemenu.add_separator()
 filemenu.add_command(label='Exit',command=windoe.qiut)
 
 edimenu = tk.Menu(menubar,tearoff=0)
 menubar.add_cascade(label='Edit',menu = editmenu)
 filemenu.add_command(label='Cut',command = do_job)
 filemenu.add_command(label='Copy',command = do_job)
 filemenu.add_command(label='Paste',command = do_job)
 
 submenu = tk.Menu(filemenu)
 filemenu.add_cascade(label='Import',menu=submenu,underline=0)
 submenu.add_command(label='Submenul',command=do_job)
 
 window.config(menu=menubar)

 window.mainloop()

Rrame 底层框架

import tkinter as tk
 
window = tk.Tk()
window.title('menubar')
window.geometry('200x80')

tk.Label(window,text = 'on the window',bg = '#00838F').pack()

frm = tk.Frame(window)
frm.pack()
frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)
frm_l.pack(side='left')
frm_r.pack(side='right')
#基于主frm的左右

tk.Label(frm_l,text = 'on the frm_l1',bg = '#009688').pack()
tk.Label(frm_l,text = 'on the frm_l2',bg = '#009688').pack()
tk.Label(frm_r,text = 'on the frm_r',bg = '#BDBDBD').pack()

messagebox 窗口

import tkinter as tk
from tkinter import messagebox
 
window = tk.Tk()
window.title('menubar')
window.geometry('200x80')

def hit_me():
    messagebox.showinfo(title = 'hi',message = 'how you doing')
    #信息窗口

tk.Button(window,text = 'hit me',command = hit_me).pack()

  • showinfo
  • showwarning
  • showerror
  • askquestion
  • askyesno
  • asktrycancel #返回字符串yes或者no
  • askokcancel #返回Turn或者False

pack(),grid(),place()

tk.Label(window,text=1).pack(side='top')
tk.Label(window,text=1).pack(side='bottom')
tk.Label(window,text=1).pack(side='left')
tk.Label(window,text=1).pack(side='right')

for i in range(4):
    for j in range(3):
        tk.Label(window,text = 1).grid(row=i,column=j,padx=10,pady=10)
tk.Label(window,text=1).place(x=10,y=100,anchor='nw')