python高级语法-python GUI编程(主要介绍 tkinter)

首先,这里必须强调,尽管python的创始人提到过python没有主打领域,后来者可以无限丰富它,但是时至今日, python语言已经找到了自己的路,但这些路里面绝对没有GUI开发。所以这里只做粗浅的介绍,而且Tkinter也不是python中常用的GUI,因为确实不好看。

以下几个常见的:

  •                       Tkinter:绑定TK GUI工具集,用python包装的tcl代码, 轻量级,但是很丑
  •                       PyGTK:Tkinter的代替品
  •                       wxPython:跨平台GUI
  •                       PyQT:跨平台,商业授权有问题,个人开发可能有版权问题,但好用

Tkinter几类组件:

布局方式:

                       pack:方位布局

                       place:坐标布局

                       gird:网格布局

相关设置请看源码,常用的都会测试到。

  按钮:

                       Button

                       RadioButton

扫描二维码关注公众号,回复: 2724893 查看本文章

                       CheckButton

                       Listbox

  文本输入组件:

                       Entry:单行

                       Text:多行

  标签:

                       label:显示图片和文字

                       Message:根据内容文字换行

  菜单:

                       Menu

                       MenuButton

  滚动条:

                       scale:滑块组件

                       Scrollbar滚动条组件

  其他组件:

                       Canvas:画布组件

                       Frame:框架组件,将多个组件分组

                       Toplevel:创建子窗口容器组件

启动消息循环在所有组件设置的最后

test1:

import tkinter
# 类似java Frame的顶层容器
base = tkinter.Tk()
base.wm_title("test")
# label测试
lb1 = tkinter.Label(base, text="这是label1")
# 布局设置,pack是一种自适应布局
lb1.pack()
lb2 = tkinter.Label(base, text="这是label2")
lb2.pack()

# entry测试
et1 = tkinter.Entry(base)
et1.pack()
et2 = tkinter.Entry(base)
et2.pack()
et2["show"] = "*"
# button测试
def cmd1():
    base.wm_title("你按下了按钮,我得到你的输入为{}".format(et1.get()))


btn = tkinter.Button(base, text="我是按钮,戳我", command=cmd1)
btn.pack()

# 消息循环,放在组件设置的最后
base.mainloop()

 

test2: 

import tkinter
# 级联菜单测试
baseFrame = tkinter.Tk()
menubar = tkinter.Menu(baseFrame)
baseFrame["menu"] = menubar
menubar2 = tkinter.Menu(menubar)
l = ["选项1-1", "选项1-2", "选项1-3"]
for i in l:
    menubar2.add_command(label=i)
menubar.add_cascade(label="选项1", menu=menubar2)
menubar.add_command(label="选项2")
baseFrame.mainloop()

test3: 

import tkinter
def makeLabel():
    global baseFrame
    tkinter.Label(baseFrame, text="点了你点了").pack()
# 弹出菜单
baseFrame = tkinter.Tk()
menubar = tkinter.Menu(baseFrame)
for i in ["选项1", "选项2", "选项3"]:
    menubar.add_separator()
    menubar.add_command(label=i)
menubar.add_command(label="你牛逼你点我啊", command=makeLabel)
def pop(event):
    # 监听位置
    menubar.post(event.x_root, event.y_root)
baseFrame.bind("<Button-3>", pop)
baseFrame.mainloop()

test4:

import tkinter
baseFrame = tkinter.Tk()
cvs = tkinter.Canvas(baseFrame, width =300, height = 200)
cvs.pack()
cvs.create_line(1,1,100,200)
baseFrame.mainloop()

 其他更多设置可在pycharm下按住ctrl选中名称获得源码查看属性。

由以上测试可知GUI组件使用套路一致:

   1创建窗口,顶级容器

   2创建各个类型组件,指明父亲位置,触发事件,设置布局

   3为主窗口设置消息循环

猜你喜欢

转载自blog.csdn.net/zhouchen1998/article/details/81258921
今日推荐