python 写一个带有菜单界面_Python基础之用tkinter写界面

Tkinter介绍

Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统。

Tkinter由一定数量的模块组成。Tkinter位于一个名为_tkinter(较早的版本名为tkinter)的二进制模块中。Tkinter包含了对Tk的低级接口模块,低级接口并不会被应用级程序员直接使用,通常是一个共享库(或DLL),但是在一些情况下它也被Python解释器静态链接。

导入库:

1 from tkinter import *

2 from tkinter.tix import Tk, Control, ComboBox #升级的组合控件包

在进行界面绘制之前需要初始化Tk()

root = Tk() #初始化tk

root便是布局的根节点了,以后的布局都在它之上

1 #设置窗口标题

2 root.title("hello tkinter")3 #设置窗口大小 注意:是X 不是*

4 root.geometry("1024x768")5 #设置窗口是否可以变化长/宽,False不可变,True可变

6 root.resizable(width=True, height=True)7 #引入升级包,这样才能使用升级的组合控件

8 root.tk.eval('package require Tix')

接下来会设置窗口的属性。

1. Label

1 activebackground, activeforeground, anchor,2 background, bitmap, borderwidth, cursor,3 disabledforeground, font, foreground,4 highlightbackground, highlightcolor,5 hightlightthickness, image, justify,6 padx, pady, relief, takefocus, text,7 textvariable, underline, wraplength,8 height, state, width

属性很多,说一下常用的属性

1 lable = Label(root, text="label", bg="pink", bd=10, font=("Arial", 12), width=8, height=3)2 lable.pack(side=LEFT)

第一个

要依附的节点

text

上面显示的字

bg

背景颜色 也可以传rgb16进制的形式

bd

边框宽度

font

字体 第一个是字体样式 第二个是字体大小

width height

宽 高

bitmap

图像

highlightcolor

高亮时字体颜色

highlightbackground

高亮时背景颜色

textvariable

绑定的变量 之后如果变量值发生变动 字也会随之改变

wraplength

换行控制 如果是50就表示宽度到50就换行显示

最后你需要调用pack()来把控件布置上去,你可以指定布局方式,可定义的属性也非常多

1 #Booleans

2 NO=FALSE=OFF=03 YES=TRUE=ON=1

4

5 #-anchor and -sticky

6 N='n'

7 S='s'

8 W='w'

9 E='e'

10 NW='nw'

11 SW='sw'

12 NE='ne'

13 SE='se'

14 NS='ns'

15 EW='ew'

16 NSEW='nsew'

17 CENTER='center'

18

19 #-fill

20 NONE='none'

21 X='x'

22 Y='y'

23 BOTH='both'

24

25 #-side

26 LEFT='left'

27 TOP='top'

28 RIGHT='right'

29 BOTTOM='bottom'

30

31 #-relief

32 RAISED='raised'

33 SUNKEN='sunken'

34 FLAT='flat'

35 RIDGE='ridge'

36 GROOVE='groove'

37 SOLID = 'solid'

38

39 #-orient

40 HORIZONTAL='horizontal'

41 VERTICAL='vertical'

42

43 #-tabs

44 NUMERIC='numeric'

45

46 #-wrap

47 CHAR='char'

48 WORD='word'

49

50 #-align

51 BASELINE='baseline'

52

53 #-bordermode

54 INSIDE='inside'

55 OUTSIDE='outside'

56

57 #Special tags, marks and insert positions

58 SEL='sel'

59 SEL_FIRST='sel.first'

60 SEL_LAST='sel.last'

61 END='end'

62 INSERT='insert'

63 CURRENT='current'

64 ANCHOR='anchor'

65 ALL='all' #e.g. Canvas.delete(ALL)

66

67 #Text widget and button states

68 NORMAL='normal'

69 DISABLED='disabled'

70 ACTIVE='active'

71 #Canvas state

72 HIDDEN='hidden'

73

74 #Menu item types

75 CASCADE='cascade'

76 CHECKBUTTON='checkbutton'

77 COMMAND='command'

78 RADIOBUTTON='radiobutton'

79 SEPARATOR='separator'

80

81 #Selection modes for list boxes

82 SINGLE='single'

83 BROWSE='browse'

84 MULTIPLE='multiple'

85 EXTENDED='extended'

86

87 #Activestyle for list boxes

88 #NONE='none' is also valid

89 DOTBOX='dotbox'

90 UNDERLINE='underline'

91

92 #Various canvas styles

93 PIESLICE='pieslice'

94 CHORD='chord'

95 ARC='arc'

96 FIRST='first'

97 LAST='last'

98 BUTT='butt'

99 PROJECTING='projecting'

100 ROUND='round'

101 BEVEL='bevel'

102 MITER='miter'

103

104 #Arguments to xview/yview

105 MOVETO='moveto'

106 SCROLL='scroll'

107 UNITS='units'

108 PAGES='pages'

写完这些运行程序还是无法出现界面,那是因为还少了一句

root.mainloop()

2. Button

1 """

2 command: 点击调用的方法3 activeforeground: 点击时按钮上字的颜色4 activebackground: 点击时按钮的背景颜色5 """

6 button = Button(root, text='QUIT', command=root.quit, activeforeground="black", activebackground='blue', bg='red',7 fg='white')8 button.pack(fill=Y, expand=1)

3. Scale: 滑动条

1 def resize(ev=None):2 lable.config(font='Helvetica -%d bold' %scale.get())3

4 #滑动条

5 """

6 from_: 滑动条起始值7 to: 滑动条终点值8 origent: 样式 两种样式 一横一竖9 """

10 scale = Scale(root, from_=10, to=40, orient=HORIZONTAL, command=resize)11 scale.set(12)12 scale.pack()

和button不同的是command不再是点击事件了而是拖动事件,调用set()方法可以设置当前位置

4. NumberericUpDown: 数字选择框

1 #数字选择框

2 """

3 integer: 是否为整数4 max: 最大值5 min: 最小值6 value: 初始值7 step: 步长8 """

9 ct = Control(root, label='Number:', integer=True, max=12, min=2, value=2, step=2)10 ct.label.config(font='Helvetica 14 bold')11 ct.pack()

5. ComboBox: 下拉选择框

1 #下拉选择框

2 """

3 label: 前面要显示的字4 editable: 控制是否可更改5 insert(): 给下拉选择框添加选项6 """

7 cb = ComboBox(root, label='Type:', editable=True)8 for animal in ('dog', 'cat', 'hamster', 'python'):9 cb.insert(END, animal)10 cb.pack()

6. Menu: 菜单

1 #菜单选项

2 menubar =Menu(root)3 root.config(menu=menubar)4 filemenu = Menu(menubar, tearoff=0)5 #给menu添加一个选项

6 menubar.add_cascade(label='文件', menu=filemenu)7 #添加子选项

8 filemenu.add_command(label='新建...', command=click())9 filemenu.add_command(label='打开...', command=click())10 filemenu.add_command(label='保存...', command=click())11 filemenu.add_command(label='关闭填写...', command=root.quit)

7. Frame

1 #frame相当于一个局部的窗体,可以用来装载其他控件

2 frame1 =Frame(root)3 frame1.pack(fill=X)4 label1 = Label(frame1, text='您的花名:')5 label1.grid(row=1, column=0)

使用grid能让你更容易把握控件的位置,你可以指定它出现在几行几列,是否跨行跨列,跨几行等等

8. Radiobutton: 单选框

1 #单选框

2 frame2 =Frame(root)3 frame2.pack(fill=X)4 label2 = Label(frame2, text='您的性别:')5 label2.grid(row=1, column=0)6 sex =StringVar()7 sex_male = Radiobutton(frame2, text='男', fg='blue', variable=sex, value='男')8 sex_male.grid(row=1, column=2)9 sex_female = Radiobutton(frame2, text='女', fg='red', variable=sex, value='女')10 sex_female.grid(row=1, column=4)

这个单选框写出来,刚开始男和女两个单选框都是选中状态,不过,你拿鼠标单击一下,就可以正常的单选状态了。

9. ListBox: 列表

1 #列表

2 frame4 =Frame(root)3 frame4.pack(fill=X)4 label4 = Label(frame4, text='4、请删除您不会的变成语言:')5 label4.grid(row=1, column=0)6 listbox =Listbox(frame4)7 listbox.grid(row=1, column=1)8 for item in ["C", "C++", "JAVA", "PYTHON", "R", "SQL", "JS"]:9 listbox.insert(END, item)10

11 DELETE = Button(frame4, text='删除', command=lambda listbox=listbox: listbox.delete(ANCHOR))12 DELETE.grid(row=1, column=2)13 language = Button(frame4, text='确定')14 language.grid(row=2, column=1)

这里按钮点击事件的写法使用lambda表达式写的,用法可以自行百度

10. Canvas: 画板

1 from tkinter import *

2

3

4 classCanvasDemo:5 def __init__(self):6 window =Tk()7 window.title("CanvasDemo")8

9 self.canvas = Canvas(window, width=200, height=100, bg="White")10 self.canvas.pack()11

12 frame =Frame(window)13 frame.pack()14

15 btRectangle = Button(frame, text="长方形", command=self.displayRect)16 btOval = Button(frame, text="椭 圆", command=self.displayOval)17 btArc = Button(frame, text="圆 弧", command=self.displayArc)18 btPolygon = Button(frame, text="多边形", command=self.displayPolygon)19 btLine = Button(frame, text="线", command=self.displayLine)20 btString = Button(frame, text="文 字", command=self.displayString)21 btClear = Button(frame, text="清 空", command=self.clearCanvas)22

23 btRectangle.grid(row=1, column=1)24 btOval.grid(row=1, column=2)25 btArc.grid(row=1, column=3)26 btPolygon.grid(row=1, column=4)27 btLine.grid(row=1, column=5)28 btString.grid(row=1, column=6)29 btClear.grid(row=1, column=7)30

31 window.mainloop()32

33 defdisplayRect(self):34 self.canvas.create_rectangle(10, 10, 190, 90, tags="rect")35

36 defdisplayOval(self):37 self.canvas.create_oval(10, 10, 190, 90, tags="oval", fill="red")38

39 defdisplayArc(self):40 self.canvas.create_arc(10, 10, 190, 90, start=-90, extent=90, width=5, fill="red", tags="arc")41

42 defdisplayPolygon(self):43 self.canvas.create_polygon(10, 10, 190, 90, 30, 50, tags="polygon")44

45 defdisplayLine(self):46 self.canvas.create_line(10, 10, 190, 90, fill='red', tags="line")47 self.canvas.create_line(10, 90, 190, 10, width=9, arrow="last", activefill="blue", tags="line")48

49 defdisplayString(self):50 self.canvas.create_text(60, 40, text="Hi,i am a string", font="Tine 10 bold underline", tags="string")51

52 defclearCanvas(self):53 self.canvas.delete("rect", "oval", "arc", "polygon", "line", "string")54

55

56 CanvasDemo()

11. CheckButton: 多选框

1 #多选框,onvalue代表被勾选时的值,offvalue代表不被勾选时的值

2 frame8 =Frame(root)3 frame8.pack()4 agree =StringVar()5 agree = Checkbutton(frame8, text='我同意', variable=agree, onvalue='确定', offvalue='不确定',)6 agree.grid()

12. LabelFrame: 容器框

1 #容器框

2 frame10 =Frame(root)3 frame10.pack()4 group = LabelFrame(frame10, text='特别鸣谢', padx=5, pady=5)5 group.grid()6 w = Label(group, text='容器框')7 w.pack()

这些差不多够用了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值