GUI编程(Python-Tkinter)


pycharm快捷键使用技巧
Ctrl+d 复制当前行、或者选择的块
Ctrl+n 跳转到类
Ctrl+shift+n 快速查找文件名
Ctrl+shift+f 全局查找,快速查找关键字的文件
Ctrl+shift+r 全局替换
Ctrl+鼠标左键 查看源代码
Ctrl+alt+方向左右键 看源码的时候前进返回
Ctrl+a 全选
ctrl+alt+l 格式化代码
Ctrl+/ 注释选中的代码
Alt+enter 自动导入包
Tab 多行同时向后移动
shift+tab 与Tab相反
alt+选中像notepad++多行操作

Ctrl+c 复制当前行或选定的代码块到剪贴板
Ctrl+x 剪切当前行或选定的代码块到剪贴板
Ctrl+v 粘贴

label & button

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x100')
#窗口大小
l = tk.Label(window,text = 'OMG! 我成功了',bg='green',font=('Arial',12),width=15,height=2)
#标签属性集
l.pack()
#标签部署
window.mainloop()
#窗口刷新

在这里插入图片描述

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x100')
#窗口大小
var = tk.StringVar()
#tk内的变量
l = tk.Label(window,textvariable=var,bg='green',font=('Arial',12),width=15,height=2)
#标签属性集
l.pack()
#标签部署
on_hit=False
#定义状态
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',width=15,height=2,command=hit_me)
#按钮属性集
b.pack()
#按钮部署
window.mainloop()
#窗口刷新

在这里插入图片描述
在这里插入图片描述

Entry&Text

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x100')
#窗口大小
e=tk.Entry(window,show=None)
e.pack()
#输入窗口('*'为密码None显示)
def insert_point():
    var = e.get()
    t.insert('insert',var)
#触发函数1
def insert_end():
    var = e.get()
    t.insert('end',var)
#触发函数2

b1 = tk.Button(window,text='insert point',command=insert_point)
b1.pack()
#头插按钮
b2 = tk.Button(window,text='insert end',command=insert_end)
b2.pack()
#尾插按钮
t = tk.Text(window,height=2)
#文本窗口
t.pack()
window.mainloop()
#窗口刷新

在这里插入图片描述

ListBox

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x300')
#窗口大小

var1=tk.StringVar()
l = tk.Label(window,bg='yellow',width=4,textvariable=var1)
l.pack()

def print_selection():
    value = lb.get(lb.curselection())
    var1.set(value)

b1 = tk.Button(window,text='print selection',width=15,height=2,command=print_selection)
b1.pack()
var2 = tk.StringVar()
var2.set((11,12,13,14))
lb = tk.Listbox(window,listvariable=var2)
list_iteams = [1,2,3,4]
for item in list_iteams:
    lb.insert('end',item)
lb.insert(1,'first')
lb.insert(2,'second')
lb.delete(2)
lb.pack()
window.mainloop()

在这里插入图片描述

Radiobutton

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x100')
#窗口大小

var = tk.StringVar()
l = tk.Label(window,bg='yellow',width=20)
l.pack()
def print_selection():
    l.config(text='you have selected '+var.get())
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()
#窗口刷新


在这里插入图片描述

Scale

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x100')
#窗口大小


l = tk.Label(window,bg='yellow',width=20)
l.pack()
def print_selection(V):
    l.config(text='you have selected '+V)
s = tk.Scale(window,label='try me',from_=5,to=11,orient=tk.HORIZONTAL,
            length=200,showvalue=0,tickinterval=3,resolution=0.01,command=print_selection)
s.pack()
window.mainloop()
#窗口刷新


在这里插入图片描述

CheckButton

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x100')
#窗口大小


l = tk.Label(window,bg='yellow',width=20)
l.pack()
def print_selection():
    print(var1.get())
    print(var2.get())
    if(var1.get()==1)&(var2.get()==0):
        l.config(text='I love java')
    elif(var1.get()==0)&(var2.get()==1):
        l.config(text='I love C++')
    elif(var1.get()==0)&(var2.get()==0):
        l.config(text='no love')
    else:
        l.config(text='both love')

var1 = tk.IntVar()
var2 = tk.IntVar()
c1 = tk.Checkbutton(window,text='java',variable=var1,onvalue=1,offvalue=0,
                     command=print_selection)
c2 = tk.Checkbutton(window,text='C++',variable=var2,onvalue=1,offvalue=0,
                     command=print_selection)
c1.pack()
c2.pack()
window.mainloop()
#窗口刷新


在这里插入图片描述

Canvas

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x200')
#窗口大小
canvas = tk.Canvas(window,bg='blue',height=100,width=200)

image_file=tk.PhotoImage(file='ins.png')
image=canvas.create_image(100,10,anchor='n',image=image_file)

x0,y0,x1,y1=10,70,80,80
line = canvas.create_line(x0,y0,x1,y1)

x1,y1,x2,y2=90,70,80,80
oval = canvas.create_oval(x1,y1,x2,y2,fill='red')

x2,y2,x3,y3=50,110,80,80
arc = canvas.create_arc(x2,y2,x3,y3,start=0,extent=180)

rect = canvas.create_rectangle(100,30,120,50)


canvas.pack()
def moveit():
    canvas.move(rect,0,2)
b=tk.Button(window,text='move',command=moveit).pack()

window.mainloop()
#窗口刷新

在这里插入图片描述
在这里插入图片描述

Menubar

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x200')
#窗口大小

l = tk.Label(window,bg='yellow',width=20)
l.pack()

canvas = tk.Canvas(window,bg='blue',height=100,width=200)
image_file=tk.PhotoImage(file='ins.png')
image=canvas.create_image(100,10,anchor='n',image=image_file)
canvas.pack()
counter=0
def do_job():
    global counter
    l.config(text=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=window.quit)

editmenu = tk.Menu(menubar,tearoff=0)
menubar.add_cascade(label='Edit',menu=editmenu)
editmenu.add_command(label='Copy',command=do_job)
editmenu.add_command(label='Paste',command=do_job)

submenu = tk.Menu(filemenu)
filemenu.add_cascade(label='Import',menu=submenu,underline=0)
submenu.add_command(label='Submenu1',command=do_job)

window.config(menu=menubar)

window.mainloop()
#窗口刷新

在这里插入图片描述

Frame

这个有点类似H5里面的DIV

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x200')
#窗口大小

tk.Label(window,text='on the window',width=20).pack()

f = tk.Frame(window)
f.pack()

f1 =tk.Frame(f)
f2 =tk.Frame(f)
f1.pack(side='left')
f2.pack(side='right')

tk.Label(f1,text='on the f1_one').pack()
tk.Label(f1,text='on the f1_two').pack()
tk.Label(f2,text='on the f1_three').pack()
window.mainloop()

在这里插入图片描述

messagebox

import tkinter as tk
import tkinter.messagebox
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x200')
#窗口大小

def hit_me():
    tk.Label(window, text='on the window', width=20).pack()
    tk.messagebox.showinfo(title='Hi',message='祝贺')
    tk.messagebox.showerror(title='Hi', message='祝贺')
    tk.messagebox.showwarning(title='Hi', message='祝贺')

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

grid&place&anchor

import tkinter as tk
window = tk.Tk()
window.title("first window")
#窗口名
window.geometry('200x200')
#窗口大小

#tk.Label(window, text='on the window', width=20).pack(side='bottom')
#right left bottom top

tk.Label(window,text=1).place(x=10,y=100,anchor='nw')

# for i in range(4):
#     for j in range(3):
#         tk.Label(window,text=1).grid(row=i,column=j,ipadx=10,ipady=1)
window.mainloop()

在这里插入图片描述

一个登录例子

import tkinter as tk
import tkinter.messagebox
import pickle
#窗口初始化
window = tk.Tk()
window.title('Welcome to CSDN')
window.geometry('600x425')

#图片导入-画布
canvas = tk.Canvas(window,bg='blue',height=280,width=580)
image_file=tk.PhotoImage(file='wel.png')
image=canvas.create_image(300,0,anchor='n',image=image_file)
canvas.pack()

#函数
def user_login():
    uname = user_name.get()
    upassword = user_password.get()
    print(uname,upassword)
    try:
        with open('pickle_example.pickle','rb') as user_file:
            user_info = pickle.load(user_file)
    except FileNotFoundError:
        with open('pickle_example.pickle','wb') as user_file:
            user_info = {'admin':'admin'}
            pickle.dump(user_info,user_file)
    if uname in user_info:
        if upassword == user_info[uname]:
            tk.messagebox.showinfo(title='Welcome',message='How are you! '+uname)
        else:
            tk.messagebox.showerror(title='Alert',message=uname+' your password is wrong')
    else:
        print('1')
        is_sign_up = tk.messagebox.askyesno(title='Alert',message=uname+'You have not sign up ,welcome to sign up')
        if is_sign_up:
            user_sign_up()


def user_sign_up():
    def sign_to():
        np = new_pwd.get()
        npf = new_pwd_confirm.get()
        nn = new_name.get()
        with open('pickle_example.pickle','rb') as user_file:
            exist_use_info = pickle.load(user_file)
        if np!=npf:
            tk.messagebox.showerror('Errpr','Password and confirm password must be the same')
        elif nn in exist_use_info:
            tk.messagebox.showerror('Error','The user has Exist')
        else:
            exist_use_info[nn] = np
            with open('pickle_example.pickle','wb') as user_file:
                pickle.dump(exist_use_info,user_file)
            tk.messagebox.showinfo('Welcome','You have Success!')
            window_sign_up.destroy()
    window_sign_up = tk.Toplevel(window)
    window_sign_up.geometry('350x200')
    window_sign_up.title('Welcome To Sign Up')

    new_name = tk.StringVar()
    new_name.set('')
    tk.Label(window_sign_up,text = 'User name:').place(x = 10,y = 10)
    entry_new_name = tk.Entry(window_sign_up,textvariable = new_name)
    entry_new_name.place(x=150,y=10)

    new_pwd = tk.StringVar()
    tk.Label(window_sign_up,text='PassWord: ').place(x=10,y=50)
    entry_new_pwd = tk.Entry(window_sign_up,textvariable = new_pwd,show = '*')
    entry_new_pwd.place(x=150,y=50)

    new_pwd_confirm = tk.StringVar()
    tk.Label(window_sign_up,text='Confirm PassWord:').place(x=10, y=90)
    entry_new_pwd_confirm = tk.Entry(window_sign_up,textvariable = new_pwd_confirm,show='*')
    entry_new_pwd_confirm.place(x=150,y=90)

    btn_confirm_sign_up = tk.Button(window_sign_up,text='sign up',command=sign_to).place(x=150,y=130)



# 输入信息框与按钮
tk.Label(window,text='User name:').place(x=180,y=320)
tk.Label(window,text='Password:').place(x=180,y=360)

var_username = tk.StringVar()
var_username.set('example@csdn.com')
user_name = tk.Entry(window,textvariable=var_username)
user_name.place(x=270,y=320)

var_password = tk.StringVar()
user_password = tk.Entry(window,textvariable=var_password)
user_password.place(x=270,y=360)

btn_login = tk.Button(window,text='Login',command=user_login)
btn_sian_up = tk.Button(window,text='Sign Up',command=user_sign_up)
btn_login.place(x=280,y=390)
btn_sian_up.place(x=335,y=390)

window.mainloop()
import pickle
# user_file={'admin':'admin','example@csdn.com':'123'}
# file=open('pickle_example.pickle','wb')
# pickle.dump(user_file,file)
# file.close()

with open('pickle_example.pickle','rb') as file:
    a_dict1 = pickle.load(file)

print(a_dict1)

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值