前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你懂GUI?

你懂GUI?

作者头像
公众号---人生代码
发布2019-07-24 14:49:08
2.2K0
发布2019-07-24 14:49:08
举报
文章被收录于专栏:人生代码

GUI英文全称(Graphical User Interface)就是图形用户界面的意思。 python GUI库 TKinter:TKinter模块是Python的标准TkGUI工具包的接口。 其实有点像那个网页一样,就是有按钮,输入框,标签,文本等等组成的。

都会反思活动非诉讼IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

代码语言:javascript
复制
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下:


Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 

          .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,

          同样可以应用在 Windows 和 Macintosh 系统里。

          Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。


wxPython:wxPython 是一款开源软件,

         是 Python 语言的一套优秀的 GUI 图形库,

         允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。


Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,

       Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 

       中不依赖于 C 语言的全部模块。比如,Jython 的用户界面将使用 Swing,AWT或者 SWT。

       Jython 可以被动态或静态地编译成 Java 字节码。

我们现在来解决一下我们这个小案例的可能会用到的一些组件 组件属性,以及几何管理。

组件

控件 描述

代码语言:javascript
复制
Button         按钮控件; 在程序中显示按钮。
Canvas         画布控件; 显示图形元素如线条或文本
Checkbutton    多选框控件;用于在程序中提供多项选择框
Entry          输入控件;用于显示简单的文本内容
Frame          框架控件;在屏幕上显示一个矩形区域,多用来作为容器 
Label          标签控件;可以显示文本和位图
Listbox        列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton     菜单按钮控件,由于显示菜单项。
Menu           菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message        消息控件;用来显示多行文本,与 label 比较类似
Radiobutton    单选按钮控件;显示一个单选的按钮状态
Scale          范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar      滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text           文本控件;用于显示多行文本
Toplevel       容器控件;用来提供一个单独的对话框,和 Frame 比较类似
Spinbox        输入控件;与 Entry 类似,但是可以指定输入范围值
PanedWindow    PanedWindow 是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFrame     labelframe 是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox   用于显示你应用程序的消息框。
标准属性

属性 描述

代码语言:javascript
复制
Dimension    控件大小;
Color        控件颜色;
Font         控件字体;
Anchor       锚点;
Relief       控件样式;
Bitmap       位图;
Cursor       光标;
几何管理

几何方法 描述

代码语言:javascript
复制
pack()     包装;
grid()     网格;
place()    位置;

我们应该如何去创建一个GUI程序呢?不用急, 代码步骤如下:

代码语言:javascript
复制
# 导入使用的GUI模块 Tkinter
# 创建GUI的主要应用程序入口
# 添加控件并设置相应的属性
# 编写触发事件响应代码

接下来 Ken 就来带你撸一把: 导入使用的GUI模块 Tkinter 创建GUI的主要应用程序入口

代码语言:javascript
复制
from tkinter import *
root = Tk()
root.mainloop()
接下来就是 设置相应的属性
代码语言:javascript
复制
from tkinter import * 
root = Tk()
root['background'] = 'yellow'
root['height'] = 330
root['width'] = 450
root['cursor'] = 'coffee_mug'
root.title('我的第一个窗口程序')
root.resizable(False,False)
root.mainloop()

程序运行之后,就会出现一坨黄黄的(像极了粑粑),你懂的

添加控件

我们为窗口添加一个控件 用于设置提示文本

代码语言:javascript
复制
from tkinter import *
root = Tk(className="登绿")
label1 = Label(root)
label1['text'] = "Hello World"
label2 = Label(root)
label2['text'] = "志学Python"
label1.pack() # label1显示出来
label2.pack() # label2显示出来
root.mainloop()

程序运行之后就会出现 "Hello World 志学Python"

猜字游戏程序
代码语言:javascript
复制
# -*- coding: utf-8 -*-
import tkinter as tk
import random

number= random.randint(100,999)
num=0
maxnum=999
minnum=100
running=True

def btnCloseClick(event):
    root.destroy()

def btnRestartClick(event):
    global number
    global running
    global num
    global maxnum
    global minnum
    number = random.randint(100,999)
    running = True
    num = 0
    labelChange("请输入100到999之间任意整数:")
    entry_num.delete(0,'end') 
    labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))
    print(number)

def btnGuessClick(event):
    global num
    global running
    global maxnum
    global minnum
    if running:
        answer = int(entry_num.get())
        if answer == number:
            labelChange("恭喜答对了!")
            num+=1
            running = False
            numGuess()
        elif answer < number:
            num+=1
            labelChange("小了哦")
            if answer>minnum:
                minnum=answer  
        else:
            num+=1
            labelChange("大了哦")
            if answer<maxnum:
                maxnum=answer
        labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))         
    else:
        labelChange('你已经答对啦.')


def numGuess():
    if num == 1:
        labelChange('好棒!一次答对!')

    elif num < 9:
        labelChange('好厉害,尝试次数:'+str(num))

    elif num < 19:
        labelChange('还行,尝试次数:'+str(num))
    else:
        labelChange('您都试了超过20次了。。。。尝试次数:'+str(num))

def labelChange(vText):
    label_info.config(label_info,text=vText)

def labelRange(cText): 
    label_range.config(label_range,text=cText) 

root = tk.Tk(className="猜数字游戏")
root.geometry("400x150+200+200")
frame1 = tk.Frame(root)
label_info = tk.Label(frame1,width="60")
label_range = tk.Label(frame1,width="20")
label_info.pack()
label_range.pack()
frame1.pack(side = "top",fill = "x")

frame2 = tk.Frame(root)
entry_num = tk.Entry(frame2,width="40")
btnGuess = tk.Button(frame2,text="确定")
entry_num.pack(side = "left")
entry_num.bind('<Return>',btnGuessClick)
btnGuess.bind('<Button-1>',btnGuessClick)
btnGuess.pack(side = "left")
frame2.pack(side = "top",fill = "x")


frame3 = tk.Frame(root)
btnClose = tk.Button(frame3,text="关闭")
btnRestart=tk.Button(frame3,text="重玩")
btnClose.bind('<Button-1>',btnCloseClick)
btnClose.pack(side="left")
btnRestart.bind('<Button-1>',btnRestartClick)
btnRestart.pack()
frame3.pack(side = "top")

labelChange("请输入100到999之间任意整数:")
labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))
entry_num.focus_set()
print(number)

root.mainloop()

附上参考链接

  • http://www.runoob.com/python/python-gui-tkinter.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CryptoCode 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 组件
  • 标准属性
  • 几何管理
  • 接下来就是 设置相应的属性
  • 添加控件
  • 猜字游戏程序
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档