脚本---图形化用户界面

一、图形用户界面简介

Graphical User Interface(GUI)是一种允许用户与电子设备通过图形图标和可视化标志进行交互的用户界面,替代基于文本的命令行输入的界面。

在这里插入图片描述
Desktop environment & window managers:
在这里插入图片描述

GTK(GIMP Toolkit)是一个跨平台的部件工具箱(widget toolkit),用于创建图形用户界面,GTK有 GNU Lesser General Public License,允许免费和私有软件使用它。

Qt是一个跨平台的应用框架,用于创建经典的嵌入的图形用户界面,Qt可以用于商业和开源执照 GPL2.0、3.0和LGPL3.0。

wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。

Tk是一个开源跨平台的部件工具箱,提供了GUI部件,用于很多语言构建用户界面的库。
Tk源于Tcl,Tcl是一种高水平、通用的动态编程语言。类似于Tcl,Tk支持Unicode,可以运行于多种系统如Mac OS、Unix、Linux、Ms Windows

二、Perl GUI实现

Perl可以通过Tk、Qt、GTK、Wx实现构建图形用户界面。
在这里插入图片描述

使用WxPerl建立软件界面

#!/usr/bin/perl -w
use stricts;
use Wx;

###创建一个应用的对象,用于管理全局状态和处理事件
package MyApp;
use base 'Wx::App';

sub OnInit{
	my($self)=@_;
	my $frame=Wx::Frame->new(
		undef,
		-1,
		'Hello World',
		[-1,-1],
		[250,250],
	);
	$frame->Show(1);  ##顶层的窗口不会自动显示,需要用$frame->show;语句来显示。
	return 1;
}

package main;
my $app=MyApp->new;
$app->MainLoop;

当创建了应用对象后,wxPerl呼叫OnInit方法用于初始化全局应用数据并通常产生一个或多个框。OnInit方法是自动被呼叫的。可以进行应用水平的初始化。

注意wxWdiget要求每个窗口有一个为整数的ID,在wxWidget中,大部分时候不用考虑ID的值,所以可以将-1或者常量wxID_ANY传给窗口构建器用于使wxWidgets产生一个唯一的ID

重要的概念——Sizer

Sizer是WxWidgets类中Wx::Sizer类及其的子类,主要用于确定框架和对话的布局控制。

在这里插入图片描述
所有的sizers均为容器,即它们被用于展示它们所包含的一个对话框或者框项目(或者几个对话项目),这种项目有时被称为sizers children
所有的children均有以下共同的特性:最小尺寸、边界、对齐、拉伸系数

①最小尺寸:通常和起始尺寸相同,可以通过Wx::Sizer精确设置也可以通过wxWidgets计算得来,通常用-1号项目的高和/或宽来设定。
注意只有某些控制能够计算它们的尺寸,checkbox;
而有些控制如listbox没有天然的框或者高,因此需要一个明确的尺寸;
还有些控制能计算它们的高而不能计算宽,如single line text control。

②边界:边界是空白,用于分开对话项目和对话框。可以设定所有的边也可以仅设定几个边的组合,如仅设定上和下边界。
如下图为分别设置0,5,10为边界的对话框。
在这里插入图片描述

③对齐:通常对齐项目给出它最小尺寸边界更多的空间。
下图为一个对话框包含了一个listbox和一个含有三个按钮的水平box sizer,一个按钮是中间对齐,一个是顶端对齐,一个是底部对齐。
在这里插入图片描述

④拉伸系数:下图指定一个按钮的拉伸系数为1,另两个的为0,则1的可以拉伸,而0的则不变。
在这里插入图片描述

(一)Sizer类:BoxSizer

在这里插入图片描述

(二)Sizer类:StaticBoxSizer

在这里插入图片描述

(三)Sizer类:GridSizer

在这里插入图片描述

(四)Sizer类:FlexGridSizer

在这里插入图片描述

(五)Sizer使用实例
#!/usr/bin/perl -w
use strict;
use Wx;
use wxPerl::Constructors;

package MyApp;
use base 'Wx::App';
sub OnInit{
	my $self=shift;
	my $frame=wxPerl::Frame->new(undef,'A wxPerl Application');
	$frame->SetMinSize([120,80]);
	
	my $sizer=Wx::BoxSizer->new(&Wx::wxVERTICAL);
	
	my $button=wxPerl::Button->new($frame,'Click Me');
	$sizer->Add($button,2,&Wx::wxEXPAND);
	my $button2=wxPerl::Button->new($frame,'DO NOT CLICK');
	$sizer->Add($button2,1,&Wx::wxEXPAND);
	
	Wx::Event::EVT_BUTTON($button,-1,sub {
		my($b,$evt)=@_;
		$b->SetLabel('Clicked');
		$b->Disable;
	});
	

}

##更多的案例可使用Wx::Demo
下载后进入bin运行wxperl_demo.pl

三、Python GUI实现

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值