python 没有控件_请教:PYTHON有没有界面控件识别的库

'''tkinter教程之optionmenu篇'''

#optionmenu为可选菜单,与combox功能类似。

'''1.创建optionmenu'''

# -*- coding: cp936 -*-

from tkinter import *

root = tk()

v = stringvar(root)

v.set('python')

om = optionmenu(root,v,'python','php','cpp','c','java','javascript','vbscript')

om.pack()

root.mainloop()

#显示的文本自动断行,上下行分别使用了左对齐,右对齐和居中对齐

# -*- coding: cp936 -*-

from tkinter import *

root = tk()

v = stringvar(root)

#创建一个optionmenu控件

om = optionmenu(root,

v,

'python',

'php',

'cpp',

'c',

'java',

'javascript',

'vbscript'

)

om.pack()

root.mainloop()

#optionmenu的创建需要两个必要的参数,与当前值绑定的变量,通常为一stringvar类型;另一

#个是提供可选的内容列表,由optionmenu的变参数指定。

'''2.设置optionmenu的显示值'''

#当optionmenu与变量绑定后,直接使用变量赋值的方法即可改变当前的值

# -*- coding: cp936 -*-

from tkinter import *

root = tk()

v = stringvar(root)

v.set('vbscript')

#创建一个optionmenu控件

om = optionmenu(root,

v,

'python',

'php',

'cpp',

'c',

'java',

'javascript',

'vbscript'

)

om.pack()

print v.get()

root.mainloop()

#运行程序,optionmenu默认值为"vbscript",打印出的数值也为"vbscript"

#如果设置的值不包含在当前的列表中,会是什么结果?如下的代码使用"tkinter"来测试

# -*- coding: cp936 -*-

from tkinter import *

root = tk()

v = stringvar(root)

v.set('tkinter')

#创建一个optionmenu控件

om = optionmenu(root,

v,

'python',

'php',

'cpp',

'c',

'java',

'javascript',

'vbscript'

)

om.pack()

print v.get()

root.mainloop()

#程序依旧是默认值改变为tkinter,打印结果也变为tkinter,但tkinter不会添加到optionmenu的列表中,也就是说,当选择其它的选项时,tkinter的值会丢失。

'''3.打印optionmenu的值'''

# -*- coding: cp936 -*-

from tkinter import *

root = tk()

v = stringvar(root)

v.set('tkinter')

def printoption(event):

print v.get()

#创建一个optionmenu控件

om = optionmenu(root,

v,

'python',

'php',

'cpp',

'c',

'java',

'javascript',

'vbscript'

)

om.bind('',printoption)

om.pack()

root.mainloop()

#每次点击optionmenu程序打印出上次选中的项值

'''使用list作为optionmenu的选项'''

# -*- coding: cp936 -*-

from tkinter import *

root = tk()

lang = ['python','php','cpp','c','java','javascript','vbscript']

v = stringvar(root)

v.set('tkinter')

def printoption(event):

print v.get()

#创建一个optionmenu控件,使用了apply函数

om = apply(optionmenu,(root,v) + tuple(lang))

om.bind('',printoption)

om.pack()

root.mainloop()

==================================================================

'''tkinter教程之grid篇'''

# tkinter参考中最推荐使用的一个布局器。实现机制是将widget逻辑上分割成表格,在指定的位置放置想要的widget就可以了。

'''1.第一个grid例子'''

# -*- coding: cp936 -*-

# 使用grid来布局组件

from tkinter import *

root = tk()

# 创建两个label

lb1 = label(root,text = 'hello')

lb2 = label(root,text = 'grid')

lb1.grid()

lb2.grid()

root.mainloop()

# grid有两个最为重要的参数,用来指定将组件放置到什么位置,一个是row,另一个是column。如果不指定row,会将组件放置到第一个可用的行上,如果不指定column,则使用第一列。

'''2.使用row和column来指定位置'''

# -*- coding: cp936 -*-

# 使用grid来布局组件

from tkinter import *

root = tk()

# 创建两个label

lb1 = label(root,text = 'hello')

lb2 = label(root,text = 'grid')

lb1.grid()

# 指定lb2为第一行(使用索引0开始),第二列(使用索引0开始)

lb2.grid(row = 0,column = 1)

root.mainloop()

# grid有两个最为重要的参数,用来指定将组件放置到什么位置,一个是row,另一个是column。如果不指定row,会将组件放置到第一个可用的行上,如果不指定column,则使用第一列。注意这里使用grid时不需要创建,直接使用行列就可以。

'''3.为其它组件预定位置'''

# 可以使用row/column来指定组件的放置位置,并预先留出空间,以务其它需要。

# -*- coding: cp936 -*-

# 使用grid来布局组件

from tkinter import *

root = tk()

# 创建两个label

label(root,text = 'hello').pack()

# 在第一行,第10列放置lb2

label(root,text = 'grid').grid(row = 0,column = 10)

# lable(root,text = '3').grid(row = 0,column = 5)

root.mainloop()

# 这个例子中将lb2放置到第1行,第11列位置上,但运行结果与上一例从效果上看不出太大的区别。原因是:如果这个位置没有组件的话,它是看不可见的。

'''4.将组件放置到预定位置上去'''

# -*- coding: cp936 -*-

# 使用grid来布局组件

from tkinter import *

root = tk()

# 创建两个label

label(root,text = '1').grid()

# 在第1行,第11列放置lb2

label(root,text = '2').grid(row = 0,column = 10)

label(root,text = '3').grid(row = 0,column = 5)

root.mainloop()

# 可以看到label('3')是位置label('1')和label('2')之间了,即label('2')是在11列,label('3')位于第3列

'''5.将两个或多个组件同一个位置'''

# -*- coding: cp936 -*-

# 多个组件同时grid到同一个表格位置

from tkinter import *

root = tk()

# 创建两个label

lb1 = label(root,text = '1')

lb2 = label(root,text = '2')

# 将lb1和lb2均grid到(0,0)位置

lb1.grid(row = 0,column = 0)

lb2.grid(row = 0,column = 0)

def forgetlabel():

# grid_slaves返回grid中(0,0)位置的所有组件

# grid_forget将这个组件从grid中移除(并未删除,可以使用grid再将它显示出来)

print root.grid_slaves(0,0)[0].grid_forget()

# 我测试时grid_salves返回的第一个值为lb2,最后grid的那一个

button(root,text = 'forget last',command = forgetlabel).grid(row = 1)

root.mainloop()

# 这段代码是用来证明,多个组件同时放置到同一个位置上会产生覆盖的问题。对于grid_slaves返回的组件list如何排序,我没有去查想着资料,在这个例子中使用索引0,返回的正好是lb2,然后再使用grid_forget将这个删除从grid中移除,可以看到lb1显示出来了。

'''6.改变列(行)的属性值'''

# -*- coding: cp936 -*-

# 设置column的属性(columnconfigure)

from tkinter import *

root = tk()

# 创建两个label

lb1 = label(root,text = '1',bg = 'red')

lb2 = label(root,text = '2',bg = 'blue')

# 将lb1和lb2分别放置到第1行的1,2列位置上

lb1.grid(row = 0,column = 0)

lb2.grid(row = 0,column = 1)

# 指定列的最小宽度为100

root.columnconfigure(0,minsize = 100)

root.mainloop()

# 1与2的距离变的远一些了。

# 但如果这个位置没有组件存在的话这个值是不起作用的.

# 设置列或行(rowconfigure)的属性时使用父容器的方法,不是自己调用。

'''7.组件使用多列(多行)'''

# -*- coding: cp936 -*-

# 使用多行(多列)

from tkinter import *

root = tk()

# 创建如下布局(一个字符占用一个grid位置)

# a e

# b c

# d

# a占用(0,0)(0,1),b占用(1,0),c占用(1,1),d占用(2,0),e占用(0,2)

# 创建5个label,分别以背景色区别

lba = label(root,text = 'a',bg = 'red')

lbb = label(root,text = 'b',bg = 'blue')

lbc = label(root,text = 'c',bg = 'red')

lbd = label(root,text = 'd',bg = 'blue')

lbe = label(root,text = 'e',bg = 'blue')

# 以下为布局参数设置

lba.grid(row = 0,column = 0,columnspan = 2)

lbb.grid(row = 1,column = 0)

lbc.grid(row = 1,column = 1)

lbd.grid(row = 2)

lbe.grid(row = 0,column = 2)

root.mainloop()

# a与b、d的区别,它左边已改变,由于使用了两个表格;

# c与e的区别:c的右边与e的左边对齐,也就是说e被放置到第2列的下一个位置了,原因由于a已使用了第2列。

'''8.设置表格中组件的对齐属性'''

# -*- coding: cp936 -*-

# 使用sticky设置对齐方式

from tkinter import *

root = tk()

# 创建两个label

label(root,text = 'hello sticky').grid()

label(root,text = 'tkinter').grid()

# 创建两个label,并指定sticky属性

label(root,text = 'hello sticky').grid(sticky = w)

label(root,text = 'tkinter').grid(sticky = w)

root.mainloop()

# 默认属性下,组件的对齐方式为居中,设置sticky属性可以控制对齐方式,可用的值(n,s,e,w)及其组合值

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值