python : Tkinter控件
Tkinter是Python的标准GUI库。Python使用Tkinter可以快速的创建GUI应用程序由于Tkinter是内置到python的安装包中,安装Python后就能import Tkinter 库而且IDLE也是用Tkinter编写而成、对于简单的图形界面Tkinter还是能应付自如#!/usr/bin/env python#coding:utf-8from Tkinter ...
·
Tkinter是Python的标准GUI库。Python使用Tkinter可以快速的创建GUI应用程序。
Tkinter是内置到python的安装包中,安装Python就能用Tkinter 库。
if sys.version < '3':
import tkinter as tk #Python3.x
else:
import Tkinter as tk #Python2.x
tkinter支持的核心窗口组件类
Button 按钮,用来执行一个命令或别的操作
Label 标签,显示不可编译的文本或图像
Message 消息框,类似于标签,但可以显示多行文本
Entry 单行文本框
Text 多行文本框
Spinbox 输入控件,类似Entry,可以指定输入范围值
Checkbutton 复选框
Radiobutton 单选框
Canvas 画布,用来绘图。可以将图形,文本,小部件或框架放置在画布上
Frame / LabelFrame 框架,就是容器,用来存放其他控件
Listbox 列表框,显示供选方案的一个列表
Comboxlist
Menu 菜单,用来实现下来和弹出式菜单
Menubutton 菜单按钮
messageBox 消息框
OptionMenu 选择菜单
Scrollbar 滚动条
Scale 进度条
LabelScale
Grid 网络布局
Place 绝对布局
Pack 相对布局
command 简单的绑定事件
bind 绑定事件
Listbox Scrollbar
from tkinter import *
root = Tk()
log_list = Listbox(root)
log_list.place(x=0, y=0, relwidth=1, relheight=1)
for item in range(20):
log_list.insert(END, str(item)+ 'qawsedrftgyhujikolpqazwsxedcrfv')
#创建Scrollbar
yscrollbar = Scrollbar(log_list, command=log_list.yview)
yscrollbar.pack(side='right', fill=Y)
log_list.config(yscrollcommand=yscrollbar.set)
xscrollbar = Scrollbar(log_list, orient=HORIZONTAL, command=log_list.xview)
xscrollbar.pack(side='bottom', fill=X)
log_list.configure(xscrollcommand=xscrollbar.set)
root.mainloop()
Spinbox
from tkinter import *
from tkinter import ttk
class App:
def __init__(self, master):
self.master = master
self.initWidgets()
def initWidgets(self):
ttk.Label(self.master, text='绑定变量').pack()
self.intVar = IntVar()
#通过指定values选项创建Spinbox,并为之绑定变量
self.sb = Spinbox(self.master,
values=list(range(20, 100, 4)),
textvariable = self.intVar, #绑定变量
command = self.press)
self.sb.pack(fill=X, expand=YES)
self.intVar.set(20) #通过变量改变Spinbox的值
def press(self):
print(self.sb.get())
root = Tk()
root.title("Spinbox测试")
#root.iconbitmap('images/fklogo.ico')#改变窗口图标
App(root)
root.mainloop()

Radiobutton
from tkinter import *
class App:
def __init__(self, master):
self.master = master
self.initWidgets()
def initWidgets(self):
#创建一个Label组件
Label(self.master, text='选择您喜欢的教程:').pack(fill=BOTH, expand=YES)
self.intVar = IntVar()
books = ('C语言入门', 'Python入门', 'C++入门', 'Java入门')
i = 1
#采用循环创建多个Radiobutton
for book in books:
Radiobutton(self.master,
text = book,
variable = self.intVar, #将Radiobutton绑定到self.intVar变量
command = self.change, #将选中事件绑定到self.change方法
value=i).pack(anchor=W)
i += 1
#设置Radiobutton绑定的变量的值为2,则选中value为2的Radiobutton
self.intVar.set(2)
def change(self):
from tkinter import messagebox
#通过Radiobutton绑定变量获取选中的单选框
messagebox.showinfo(title=None, message=self.intVar.get() )
root = Tk()
root.title("Radiobutton测试")
App(root)
root.mainloop()
Checkbutton
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
class App:
def __init__(self, master):
self.master = master
self.initWidgets()
def initWidgets(self):
Label(self.master, text='选择您喜欢的人物:').pack(fill=BOTH, expand=YES)
self.chars = []
characters = ('孙悟空', '猪八戒','唐僧', '牛魔王')
for ch in characters:
intVar = IntVar()
self.chars.append(intVar)
cb = ttk.Checkbutton(self.master,
text = ch,
variable = intVar, #将Checkbutton绑定到intVar变量
command = self.change) #将选中事件绑定到self.change方法
cb.pack(anchor=W)
def change(self):
new_li = [str(e.get()) for e in self.chars]
st = ', '.join(new_li)
messagebox.showinfo(title=None, message=st)
root = Tk()
root.title("Checkbutton测试")
#root.iconbitmap('favicon.ico')#改变窗口图标
App(root)
root.mainloop()

Canvas Combobox
from tkinter import *
from tkinter import ttk
def go(*args):#处理事件,*args表示可变参数
return#print(comboxlist.get())#打印选中的值
def buttonClicked():
print ("OK button Clicked")
win=Tk()
canvas=Canvas(win,width=800,height=600)
image_mainbk_file=PhotoImage(file='main_bg.png')
canvas.create_image(0,0,anchor='nw',image=image_mainbk_file)
canvas.pack(side='top')
buttonOK = Button(win,text='OK', font=('Arial',18), bg='deepskyblue', command=buttonClicked)
buttonOK.place(relx=0.2, rely=0.6,relwidth=0.6, relheight=0.12)
comvalue=StringVar()#窗体自带的文本,新建一个值
comboxlist=ttk.Combobox(win,textvariable=comvalue)#初始化
comboxlist["values"]=("1","2","3","4")
comboxlist.current(0)#选择第一个
comboxlist.bind("<<ComboboxSelected>>",go)#绑定事件,下拉列表框被选中时绑定go函数
comboxlist.place(relx=0.2, rely=0.12, relwidth=0.1, relheight=0.05)

Scale
from tkinter import *
from tkinter import ttk
class App:
def __init__(self, master):
self.master = master
self.initWidgets()
def initWidgets(self):
self.scale = Scale(self.master,
from_=-100,#设置最大值
to=100,#设置最小值
resolution=5,#设置步长
label='示范Sacle',#设置标签内容
length=400,#设置轨道的长度
width=30,#设置轨道的宽度
troughcolor='lightblue',#设置轨道的背景色
sliderlength=20,#设置滑块的长度
sliderrelief=SUNKEN,#设置滑块的立体样式
showvalue=YES,#设置显示当前值
orient=HORIZONTAL)#设置水平方向
self.scale.pack()
f = Frame(self.master)#创建一个Frame作为容器
f.pack(fill=X, expand=YES, padx=10)
Label(f, text='是否显示值:').pack(side=LEFT)
i = 0
self.showVar = IntVar()
self.showVar.set(1)
#创建两个Radiobutton控制Scale是否显示值
for s in ('不显示', '显示'):
Radiobutton(f, text=s, value=i,variable=self.showVar,
command=self.switch_show).pack(side=LEFT)
i += 1
f = Frame(self.master)#创建一个Frame作为容器
f.pack(fill=X, expand=YES, padx=10)
Label(f, text='方向:').pack(side=LEFT)
i = 0
self.orientVar = IntVar()
self.orientVar.set(0)
#创建两个Radiobutton控制Scale的方向
for s in ('水平', '垂直'):
Radiobutton(f, text=s, value=i,variable=self.orientVar,
command=self.switch_orient).pack(side=LEFT)
i += 1
def switch_show(self):
self.scale['showvalue'] = self.showVar.get()
def switch_orient(self):
self.scale['orient'] = VERTICAL if self.orientVar.get() else HORIZONTAL
root = Tk()
root.title("Scale测试")
App(root)
root.mainloop()
LabeledScale
from tkinter import *
from tkinter import ttk
class App:
def __init__(self, master):
self.master = master
self.initWidgets()
def initWidgets(self):
self.scale = ttk.LabeledScale(self.master,
from_ = 0, # 设置最大值
to = 100)# 设置最小值
#compound = BOTTOM # 设置显示数值的Label在下方
self.scale.value = 0
self.scale.pack(fill=X, expand=YES)
root = Tk()
root.title("LabeledScale测试")
App(root)
root.mainloop()

#!/usr/bin/env python
#coding:utf-8
from Tkinter import *
class MainWindow:
def __init__(self):
self.frame = Tk()#tkinter的主窗口
self.label_name = Label(self.frame,text = "name:")
self.label_age = Label(self.frame,text = "age:")
self.label_sex = Label(self.frame,text = "sex:")
self.text_name = Text(self.frame,height = "1",width = 30)
self.text_age = Text(self.frame,height = "1",width = 30)
self.text_sex = Text(self.frame,height = "1",width = 30)
self.label_name.grid(row = 0,column = 0)
self.label_age.grid(row = 1,column = 0)
self.label_sex.grid(row = 2,column = 0)
self.button_ok = Button(self.frame,text = "ok",width = 10)
self.button_cancel = Button(self.frame,text = "cancel",width = 10)
self.text_name.grid(row = 0,column = 1)
self.text_age.grid(row = 1,column = 1)
self.text_sex.grid(row = 2,column = 1)
self.button_ok.grid(row = 3,column = 0)
self.button_cancel.grid(row = 3,column = 1)
self.frame.mainloop()#进入消息循环
frame = MainWindow()
程序的主要功能:
1、启动以后自动计时
2、计时完成后弹出窗口进行提示 (默认时间为30分钟)
3、点击确定后重新进行计时
问题:1、界面简单不精致 2、休眠时不能够自动停止计时
# -*- coding: utf-8 -*-
import time, sys
if sys.version < '3':
from Tkinter import *
else:
from tkinter import *
mydelaymin = 30 #窗口提示的延迟时间,以分钟计
#------------------def-------------------
def showMessage():
#show reminder message window
root = Tk() #建立根窗口
#root.minsize(500, 200) #定义窗口的大小
#root.maxsize(1000, 400) #不过定义窗口这个功能我没有使用
root.withdraw() #hide window
#获取屏幕的宽度和高度,并且在高度上考虑到底部的任务栏,为了是弹出的窗口在屏幕中间
screenwidth = root.winfo_screenwidth()
screenheight = root.winfo_screenheight() - 100
root.resizable(False,False)
#添加组件
root.title("Warning!!")
frame = Frame(root, relief=RIDGE, borderwidth=3)
frame.pack(fill=BOTH, expand=1) #pack() 放置组件若没有则组件不会显示
#窗口显示的文字、并设置字体、字号
label = Label(frame, text="You have been working 30 minutes! Please have a break!!", \
font="Monotype\ Corsiva -20 bold")
label.pack(fill=BOTH, expand=1)
#按钮的设置
button = Button(frame, text="OK", font="Cooper -25 bold", fg="red", command=root.destroy)
button.pack(side=BOTTOM)
root.update_idletasks()
root.deiconify() #now the window size was calculated 还原最小化(不用不会出现窗口)
root.withdraw() #hide the window again 防止窗口出现被拖动的感觉 具体原理未知?
root.geometry("{0}x{1}+{2}+{3}".format(int(root.winfo_width() + 10), int(root.winfo_height() + 10),
int((screenwidth - root.winfo_width())/2), int((screenheight - root.winfo_height())/2)))
#geometry:设置窗口的宽高。%sx%s代表了初始化时主窗口的大小,%s,%s代表了初始化时窗口所在的位置
root.deiconify()
root.mainloop()
while True:
time.sleep(mydelaymin*60) #参数为秒
showMessage()
更多推荐



所有评论(0)