Python--我在学tkinter

18.1使用基本步骤

1.导入tkinter 模块
2.创建Tk类的实例,Tk对象表示一个窗口
3.对窗口进行设置
4.创建控件类的实例
5.调用mainloop函数进入事件循环

18.2编写第一个tkinter程序

  1. 简单的窗口制作
##tkinter 学习
import tkinter
window =tkinter.Tk()
window['background']='blue'
w=300
h=200
ws=window.winfo_screenwidth()
hs=window.winfo_screenwidth()
x=(ws/2)-(w/2)
y=(hs/2)-(h/2)
window.title('第一个tkinter应用')
window.geometry('%dx%d+%d+%d'%(w,h,x,y))
label=tkinter.Label(window,text='Hello world')
label.pack()
tkinter.mainloop()

18.3布局

pack与grid还有place只能三选一

18.3.1 pack布局

  1. 控件居中水平
    此时默认水平居中
##tkinter 学习
from tkinter import *
window =Tk()
window.title('水平居中')
window.geometry('200x100')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack()
Label(window,text='2',bg='green',fg='white').pack()
Label(window,text='3',bg='blue',fg='white').pack()
mainloop()
  1. 水平填充
    pack方法的fill关键字
    w.pack(fill=X)
##tkinter 学习
from tkinter import *
window =Tk()
window.title('水平填充')
window.geometry('200x100')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack(fill=X)
Label(window,text='2',bg='green',fg='white').pack(fill=X)
Label(window,text='3',bg='blue',fg='white').pack(fill=X)
mainloop()
  1. 设置边框
    (1)水平外边框
    pack方法的padx关键字参数
    例如:w.pack(fill=X,padx=c)#c为一常数,表示控件外边距大小
##tkinter 学习
from tkinter import *
window =Tk()
window.title('水平外边框')
window.geometry('200x100')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack(fill=X,padx=10)
Label(window,text='2',bg='green',fg='white').pack(fill=X,padx=10)
Label(window,text='3',bg='blue',fg='white').pack(fill=X,padx=10)
mainloop()

(2)垂直外边框
利用pack的关键字pady
w.pack(fill=X,pady=c)
对于c,控件与控件之间的距离是2c,第一个控件到窗口上边缘的距离是c
下面是两者同时使用

from tkinter import *
window =Tk()
window.title('垂直外边框')
window.geometry('200x100')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack(fill=X,padx=10,pady=5)
Label(window,text='2',bg='green',fg='white').pack(fill=X,padx=10,pady=5)
Label(window,text='3',bg='blue',fg='white').pack(fill=X,padx=10,pady=5)
mainloop()
  1. 水平排列
    可以使用pack方法里面的side关键字,将其设为LEFT,会让控件从左到右排列
##tkinter 学习
from tkinter import *
window =Tk()
window.title('水平排列')
window.geometry('200x200')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack(fill=X,padx=20,pady=5,side=LEFT)
Label(window,text='2',bg='green',fg='white').pack(fill=X,padx=20,pady=5,side=LEFT)
Label(window,text='3',bg='blue',fg='white').pack(fill=X,padx=20,pady=5,side=LEFT)
mainloop()

18.3.2

18.3.3

18.4 控件

18.4.1 label and button

(1)label
text 设置文本
fg设置文本框的颜色
width和height设置文本框的宽度和高度
还有可以使用变量更改label文本
(2)button
在console输出信息,给用户一些反馈
button和label比起来,使用几乎是一样的,只是button还需要一个处理单击事件的回调函数,这个函数需要通过button的command关键字

import tkinter as tk
import random
window=tk.Tk()
window.title('label and button')
window['background']='black'
window.geometry('300x300+30+30')
labell=tk.Label(window,text='hello,world',fg='blue',width=10,height=3)
labell.pack()
var=tk.StringVar()
var.set('hello,world')
label2=tk.Label(window,textvariable=var,fg='green',width=10,height=3)
label2.pack(pady=20)
onHit=False
#第一个按钮的单击回调函数
def hitMe():
    global onHit
    if onHit==False:
       onHit=True
       var.set('世界你好')
    else:
        onHit=False
        var.set('我不好')
button1=tk.Button(window,text='单击我',command=hitMe)
button1.pack()
def getLabelText():
    print(var.get())
button2=tk.Button(window,text='获取label控件的文本',command=getLabelText)
button2.pack(pady=20)
window.mainloop()

18.4.2 entry and text

(1)text可以插入图片,这个是我想要的
感觉怪怪的,因为图片没有显示完整

import tkinter as tk
window=tk.Tk()
window.title('text 图片设置')
window['background']='black'
window.geometry('1000x1000+30+30')
text=tk.Text(window)
text.pack(pady=10)
#对于插入的图片,支持gif bmp,不支持jpg和png
#所以遇到这些不支持的图片,要用PIL处理一下
from PIL import Image,ImageTk
#装载pic.png
pic=Image.open('cuteanmi.jpg')
photo1=ImageTk.PhotoImage(pic)
text.image_create(tk.END,image=photo1)
#插入字体
text.tag_configure('big')
text.insert(tk.END,'keai','big')
window.mainloop()

18.4.3 ==radiobutton ==

Radiobutton是单选按钮控件

18.4.4 checkbutton

import tkinter as tk
window=tk.Tk()
window.title('radiobutton')
window.geometry('300x300')
window['background']='black'
#该变量与三个Radiobutton同时绑定
var=tk.StringVar()
label=tk.Label(window,bg='yellow',width=20,text='empty')
label.pack()
#默认选择第一个
var.set('A')
def printSelection():
    label.config(text='你已经选择了'+var.get())
printSelection()
#创建控件
r1=tk.Radiobutton(window,text='选项A',variable=var,value='A',command=printSelection)
r1.pack()
r2=tk.Radiobutton(window,text='选项B',variable=var,value='B',command=printSelection)
r2.pack()
r3=tk.Radiobutton(window,text='选项C',variable=var,value='C',command=printSelection)
r3.pack()
window.mainloop()

18.4.5 scale

18.4.6 Listbox

18.5 向窗口添加菜单

18.6 对话框

import tkinter as tk
import tkinter.messagebox
window=tk.Tk()
window.title('my window')
window.geometry('300x300')
def hit_me():
    #依次执行,只有前一个完成了后一个才会显示
    #返回ok
    tk.messagebox.showinfo(title='信息对话框',message='这是我要的信息')
    #返回ok
    tk.messagebox.showwarning(title='警告对话框',message='警告')
    #返回ok
    tk.messagebox.showerror(title='错误信息',message='错误信息')
    #返回ok或者No
    print(tk.messagebox.askquestion(title='询问对话框',message='你要干嘛'))
    #返回true或者false
    print(tk.messagebox.askyesno(title='yes/no',message='请给出正确选择'))
    # 返回true或者false
    print(tk.messagebox.askokcancel(title='ok/cancel',message='确定取消'))
    # 返回true或者false或者None
    print(tk.messagebox.askokcancel(title='ok/no/cancel',message='please give me your answer'))
tk.Button(window,text='hit me',command=hit_me).pack()
window.mainloop()

18.7小结

18.8 实战与练习

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值