精华内容
下载资源
问答
  • 这个教程给出几个如何使用类似zenitywhiptail的工具在Bash ...这两个工具的不同之处在于显示消息框或者对话框的方式。Zenity用GTK工具包创建图形用户界面,而whiptail则在终端窗口内创建消息框。 Zenity 工具 在...

    这个教程给出几个如何使用类似zenity和whiptail的工具在Bash Shell 脚本中提供消息/对话框的例子。使用这些工具,你的脚本能够告知用户当前程序运行的状态并能与用户进行交互。这两个工具的不同之处在于显示消息框或者对话框的方式。Zenity用GTK工具包创建图形用户界面,而whiptail则在终端窗口内创建消息框。

    Zenity 工具

    在Ubuntu中安装zenity,运行:

    
    
    1. sudo apt-get install zenity

    用zenity创建消息框或者对话框的命令是不言自明的,我们会给你提供一些例子来参考。

    创建消息框

    
    
    1. zenity --info --title "Information Box" --text "This should be information" --width=300 --height=200

    消息框截图

    消息框截图

    创建 Yes/No 询问对话框

    
    
    1. zenity --question --text "Do you want this?" --ok-label "Yeah" --cancel-label="Nope"

    问题截图

    问题截图

    创建输入框并将输入值保存到变量中

    
    
    1. a=$(zenity --entry --title "Entry box" --text "Please enter the value" --width=300 --height=200)
    2. echo $a

    输入框截图

    输入框截图

    输入后,值会保存在变量 $a 中。

    这是一个获取用户姓名并显示的实际事例。

    
    
    1. #!/bin/bash
    2. #
    3. # This script will ask for couple of parameters
    4. # and then continue to work depending on entered values
    5. #
    6. # Giving the option to user
    7. zenity --question --text "Do you want to continue?"
    8. # Checking if user wants to proceed
    9. [ $? -eq 0 ] || exit 1
    10. # Letting user input some values
    11. FIRSTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your first name." --width=300 --height=150)
    12. LASTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your last name." --width=300 --height=150)
    13. AGE=$(zenity --entry --title "Entry box" --text "Please, enter your age." --width=300 --height=150)
    14. # Displaying entered values in information box
    15. zenity --info --title "Information" --text "You are ${FIRSTNAME} ${LASTNAME} and you are ${AGE}(s) old." --width=300 --height=100

    这些是运行前面脚本的截图。

    例1-问题-1

    例1-问题-1

    框1

    例1-输入框-1

    例1-输入框-1

    输入框

    例1-输入框-2

    例1-输入框-2

    输入框

    例1-输入框-3

    例1-输入框-3

    输入框

    例1-信息

    例1-信息

    信息框

    别忘了查看也许能帮助到你的有用的zenity 选项

    Whiptail 工具

    在Ubuntu上安装whiptail,运行

    
    
    1. sudo apt-get install whiptail

    用whiptail创建消息框或者对话框的命令也是无需解释的,我们会给你提供一些基本例子作为参考。

    创建消息框

    
    
    1. whiptail --msgbox "This is a message" 10 40

    whiptail消息框截图

    whiptail消息框截图

    创建 Yes/No 对话框

    
    
    1. whiptail --yes-button "Yeah" --no-button "Nope" --title "Choose the answer" --yesno "Will you choose yes?" 10 30

    whiptail对话框截图

    whiptail对话框截图

    创建有缺省值的输入框

    
    
    1. whiptail --inputbox "Enter your number please." 10 30 "10"

    whiptail输入框截图

    whiptail输入框截图

    尝试使用输入值要注意的一点是whiptail用stdout显示对话框,用stderr输出值。这样的话,如果你用 var=$(...),你就根本不会看到对话框,也不能获得输入的值。解决方法是交换stdout和stderr。在whiptail命令后面添加 3>&1 1>&2 2>&3 就可以做到。你想获取输入值的任何whiptail命令也是如此。

    创建菜单对话框

    
    
    1. whiptail --menu "This is a menu. Choose an option:" 20 50 10 1 "first" 2 "second" 3 "third"

    whiptail菜单截图

    whiptail菜单截图

    这是一个请求用户输入一个文件夹的路径并输出它的大小的 shell 脚本

    
    
    1. #!/bin/bash
    2. #
    3. #
    4. # Since whiptail has to use stdout to display dialog, entered value will
    5. # be stored in stderr. To switch them and get the value to stdout you must
    6. # use 3>&1 1>&2 2>&3
    7. FOLDER_PATH=$(whiptail --title "Get the size of folder" \
    8. --inputbox "Enter folder path:" \
    9. 10 30 \
    10. "/home" \
    11. 3>&1 1>&2 2>&3)
    12. if [ -d $FOLDER_PATH ]
    13. then
    14. size=$(du -hs "$FOLDER_PATH" | awk '{print $1}')
    15. whiptail --title "Information" \
    16. --msgbox "Size of ${FOLDER_PATH} is ${size}" \
    17. 10 40
    18. elif [ -f $FOLDER_PATH ]
    19. then
    20. whiptail --title "Warning!!!" \
    21. --msgbox "The path you entered is a path to a file not a folder!" \
    22. 10 40
    23. else
    24. whiptail --title "Error!!!"
    25. --msgbox "Path you entered is not recognized. Please try again" \
    26. 10 40
    27. fi

    这是之前例子的一些截图:

    例2-输入框

    例2-输入框

    输入框

    例2-消息框

    例2-消息框

    消息框

    如果你在终端下工作,帮助手册总是有用的。

    结论

    选择合适的工具显示对话框取决于你期望在桌面机器还是服务器上运行你的脚本。桌面机器用户通常使用GUI窗口环境,也可能运行脚本并与显示的窗口进行交互。然而,如果你期望用户是在服务器上工作的,(在没有图形界面时,)你也许希望能确保总能显示,那就使用whiptail或者任何其它在纯终端窗口显示对话框的工具。


    原文发布时间为:2015-06-02

    本文来自云栖社区合作伙伴“Linux中国”

    展开全文
  • 非模态对话框生成与模态有相似之处,主要不同在于模态采用DoModal函数生成,而非模态采用Create函数;而且非模态对话框生存周期较长,一般窗口的生存周期相同。 到添加类一步,非模态与模态都是相同的,由于要...
    非模态对话框生成与模态有相似之处,主要不同在于模态采用DoModal函数生成,而非模态采用Create函数;而且非模态对话框生存周期较长,一般和父窗口的生存周期相同。 
    

         到添加类一步,非模态与模态都是相同的,由于要使用Create函数,因为要在生成非模态对话框的父窗口中添加对话框类的指针,类型为(假设添加类时,非模态对话框类为CModallessDlg)CModallessDlg *,假设指针名为m_pModalessDlg。

          在程序的适当处添加下列代码即可生成、显示非模态对话框:

          m_pModalessDlg=new CModallessDlg;
          m_pModalessDlg->Create(标识,this);

          m_pModalessDlg->ShowWindow(SW_SHOW);

          在退出前要清除生成的非模态对话框:

         delete m_pModalessDlg;
         m_pModalessDlg=NULL;

    参考王华、朱时银、史兰等编著《VC++.NET 开发指南与实例详析》, 机械工业出版社
    说明:本人是初学者,理解可能偏颇很多,欢迎评论及指点 

    展开全文
  • VC++中非模态对话框生成与模态有相似之处,主要不同在于模态采用DoModal函数生成,而非模态采用Create函数;而且非模态对话框生存周期较长,一般窗口的生存周期相同。 到添加类一步,非模态与模态都是相同的. ...
         VC++中非模态对话框生成与模态有相似之处,主要不同在于模态采用DoModal函数生成,而非模态采用Create函数;而且非模态对话框生存周期较长,一般和父窗口的生存周期相同。                到添加类一步,非模态与模态都是相同的.   但由于要使用Create函数,因为要在生成非模态对话框的父窗口中添加对话框类的指针,类型为(假设添加类时,非模态对话框类为CModallessDlg)CModallessDlg *,假设指针名为m_pModalessDlg。  
        在程序的适当处(一般在视图文件中)添加下列代码即可生成、显示非模态对话框:
              CModallessDlg *m_pModalessDlg=new CModallessDlg;       
             m_pModalessDlg->Create(标识,this);  // 标识即为所要显示的对话框的ID  
            m_pModalessDlg->ShowWindow(SW_SHOW);  
            在退出前要清除生成的非模态对话框:     
           delete m_pModalessDlg;       
           m_pModalessDlg=NULL;
    展开全文
  • 这样虽然解决了上面主窗口一闪而过问题,但是,如果在my1 对话框出现时 候不点enterBtn,而是直接关闭对话框,那么此时整个程序应该结束执行,但 是事实是这样吗?如果你此时对程序进行了改动,再次按下run ...
  • PySide是一个免费软件,与PyQt不同之处在于使用了LGPL,允许PySide免费开发商业软件。 PySide有15个模块。这些模块支持对GUI,多媒体,XML,网络以及数据库进行操作。本教程目的主要是学习其中两个模块:...
  • 组件

    2012-05-09 20:37:04
    对话框组件Dialog:界面效果Frame类似,是一个拥有边框最大化、最小化、关闭按钮顶级窗口,其中也可以添加其他组件或容器,但不同之处在于对话框组件主要用于接收用户某种形式简单输入,起到“确认”操作...

    对话框组件Dialog:界面效果和Frame类似,是一个拥有边框和最大化、最小化、关闭按钮的顶级窗口,其中也可以添加其他的组件或容器,但不同之处在于对话框组件主要用于接收用户某种形式的简单输入,起到确认操作或警告/提示的作用。

    Dialog组件的默认布局管理器是BorderLayout类型,且默认初始化为不可见的,需要使用setVisible(true)方法使之显示出来

    Dialog组件虽然是顶级窗口,但必须依赖一个其他的窗口而不能单独存在,所依赖的窗口称为对话框的所有者(Owner),通常是Frame或其他Dialog

    当其所有者窗口最小化时,Dialog也会自动隐藏为对用户不可见,当所有者窗口被还原时,Dialog重新变为可见。

         通过建立Dialog的子类来建立一个对话框类,然后这个类的一个实例,即该类的一个对象,就是一个对话框。

    构造方法
    public Dialod(Frame f,String s);
    public Dialod(Frame f,String s,boolean b);

    对话框分为无模式对话框(Modeless Dialog)和有模式对话框(Modal Dialog)两种:

    有模式对话框将阻断输入到其所在应用程序中其他所有窗体的内容,例如MS Word中的文件对话框。

    无模式对话框显示与否都不影响所在应用程序其他窗体的操作,通常用于提供非必须的辅助性功能,如Word查找/替换对话框。

    常用方法
    public String getTitle();
    public void setTitle();
    public void setModal(Boolean model);
    public void setSize(int width,int height);
    public void setVisible(boolean b);

    文件对话框FileDialog
    文件对话框java.awt.FileDialog,继承了Dialog类,但属于有模式对话框,用于在打开和保存文件时指定文件的路径和文件名。

    构造方法
    public FileDialog(Frame f,String s, int mode);

    常用方法
    public String getDirectory();
    public String getFile();

    需注意,文件对话框仅仅提供了一个文件操作的界面,要真正实现对文件的操作应使用文件的输入输出流(方法loadFile()saveFile()saveFileAs()中都用到了文件的输入/输出流的操作)。

    典型Swing组件

    1 JFrame

    继承并扩充啦java.AwtFrame类主要包括DO_NOTHING_ON_CLOSE:默认窗口关闭操作为“误操作即淡季窗口的“关闭”HIDE_ON_CLOSE:默认窗口关闭操作作为“隐藏窗口”,即点击窗口的关闭按钮时隐藏当前的窗口。DISPOEE_ON_CLOSE:默认窗口关闭操作为“销毁操作”

    EXIT_ON_CLOSE:默认的为关闭窗口为退出程序

    package com.hesi;

    import java.awt.*;

    import java.awt.event.*;

    public class TestDialog extends Frameimplements ActionListener

    {

             Labelinfo;

             DialogquitDialog;

             DialogloginDialog;

             TextFieldtf_name;

             TextFieldtf_psw;

             Buttonlogin,regist,help,exit;

            

             publicTestDialog()

             {

                       super("注册窗口");

                       login=newButton("登录");

                       regist=newButton("注册");

                       help=newButton("帮助");

                       exit=newButton("退出");

                       Panelp=new Panel();

                       p.setLayout(newGridLayout(1,4));

                       p.add(login);

                       p.add(regist);

                       p.add(help);

                       p.add(exit);

                       info=newLabel("您尚未登录");

                       add(p,BorderLayout.NORTH);

                       add(info,BorderLayout.CENTER);

                       login.addActionListener(this);

                       exit.addActionListener(this);

                       addWindowListener(newWindowAdapter()

                       {

                                publicvoid windowClosing(WindowEvent e)

                                {

                                         quit();

                                }

                       });

                       loginDialog=this.createLoginDialog(this);

                       quitDialog=this.createQuitDialog(this);

                      

            

                       setSize(200,150);

                       setLocation(450,200);

                       setVisible(true);

             }

             publicDialog createQuitDialog(Frame f)

             {

                       Dialogd=new Dialog(f,"确认退出对话框",true);

                       Labelnote=new Label("您确定要退出程序吗?");

                       Panelp=new Panel();

                       p.setLayout(newGridLayout(1,2));

                       Buttonconfirm=new Button("确定");

                       Buttoncancel=new Button("取消");

                       confirm.setActionCommand("confirmQuit");

                       cancel.setActionCommand("cancelQuit");

                       confirm.addActionListener(this);

                       cancel.addActionListener(this);

                       p.add(confirm);

                       p.add(cancel);

                       d.setSize(200,100);

                       d.setLocation(400,200);

                       d.add(note,BorderLayout.CENTER);

                       d.add(p,BorderLayout.SOUTH);

                       returnd;

             }

             publicDialog createLoginDialog(Frame f)

             {

                       Dialogd=new Dialog(f,"登录对话框",true);

                       Labelnote=new Label("请输入注册信息");

                       Panelpa=new Panel();

                       pa.setLayout(newGridLayout(2,1));

                       pa.add(newLabel("用户名"));

                       pa.add(newLabel("密码"));

                       Panelpc=new Panel();

                       pc.setLayout(newGridLayout(2,1));

                       tf_name=newTextField();

                       tf_psw=newTextField();

                       tf_psw.setEchoChar('*');

                       pc.add(tf_name);

                       pc.add(tf_psw);

                       Panelpb=new Panel();

                       pb.setLayout(newGridLayout(1,2));

                       Buttοnsubmit=new Button("提交");

                       Buttoncancel=new Button("取消");

                       submit.setActionCommand("submitLogin");

                       cancel.setActionCommand("cancelLogin");

                       submit.addActionListener(this);

                       cancel.addActionListener(this);

                       pb.add(submit);

                       pb.add(cancel);

                       d.add(note,BorderLayout.NORTH);

                       d.add(pa,BorderLayout.WEST);

                       d.add(pc,BorderLayout.CENTER);

                       d.add(pb,BorderLayout.SOUTH);

                       d.setSize(200,110);

                       d.setLocation(400,200);

                       returnd;

             }

            

            

             publicvoid actionPerformed(ActionEvent e)

             {

                       Strings=e.getActionCommand();

                       if(s.equals("登录"))

                       {

                       loginDialog.setVisible(true);

                       }

                       elseif(s.equals("退出"))

                       {

                       this.quit();

                       }

                       elseif(s.equals("confirmQuit"))

                       {

                       System.exit(0);

                       }

                       elseif(s.equals("cancelQuit"))

                       {

                       quitDialog.setVisible(false);

                       }

                       elseif(s.equals("submitLogin"))

                       {

                       Stringname=tf_name.getText();

                       Stringpassword=(tf_psw).getText();

                       if(name.equals("Scott")&&password.equals("1134"))

                       {

                                info.setText("欢迎您:"+name+"用户");

                       }else

                       {

                                info.setText("验证失败,错误的用户/密码!");

                       }

                       loginDialog.setVisible(false);

                       }

                       elseif(s.equals("cancelLogin"))

                       {

                       loginDialog.setVisible(false);

                       }

             }

             publicvoid quit()

             {

                       quitDialog.setVisible(true);

             }       

             publicstatic void main(String[] args)

             {

                       newTestDialog();

             }

    }

    展开全文
  • (1)针对多窗口类浏览器模式问题,指出并分析了该问题存在原因,利用Activity运行机制,通过Fragment栈对主要模块Webview进行管理,实现对不同模块之间切换控制。 (2)针对跨域数据交互问题,指出并分析了...
  • MFC程序框架剖析

    2015-03-05 09:53:19
    一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。...
  • windows 程序设计

    2011-07-24 21:16:30
    一个Windows的.EXE文件中有使用到的不同动态链接库的参考数据,所使用的函数即在那些动态链接库中。当Windows程序被加载到内存中时,程序中的呼叫被指向DLL函数的入口。如果该DLL不在内存中,就把它加载到内存中。 ...
  • 发生周期性变化信号,因待测信号不规则,不能直接送入FPGA 芯片中 理,所以应该首先对待测信号进行放大、降压、与整形等一系列处理。 (2)分频电路 将处理过信号4 分频,这样可以将频率计测量范围扩大4 倍...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    暴风影音只是同我一样从Gabest官方下载到了Media Player Classic源码,不同的是,暴风影音将Media Player Classic改成了自己名字并加入了许多解码器,打包成自己产品,其实这也无可厚非,关键就在于其作者老爱把...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    暴风影音只是同我一样从Gabest官方下载到了Media Player Classic源码,不同的是,暴风影音将Media Player Classic改成了自己名字并加入了许多解码器,打包成自己产品,其实这也无可厚非,关键就在于其作者老爱把...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    暴风影音只是同我一样从Gabest官方下载到了Media Player Classic源码,不同的是,暴风影音将Media Player Classic改成了自己名字并加入了许多解码器,打包成自己产品,其实这也无可厚非,关键就在于其作者老爱把...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    暴风影音只是同我一样从Gabest官方下载到了Media Player Classic源码,不同的是,暴风影音将Media Player Classic改成了自己名字并加入了许多解码器,打包成自己产品,其实这也无可厚非,关键就在于其作者老爱把...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    暴风影音只是同我一样从Gabest官方下载到了Media Player Classic源码,不同的是,暴风影音将Media Player Classic改成了自己名字并加入了许多解码器,打包成自己产品,其实这也无可厚非,关键就在于其作者老爱把...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    暴风影音只是同我一样从Gabest官方下载到了Media Player Classic源码,不同的是,暴风影音将Media Player Classic改成了自己名字并加入了许多解码器,打包成自己产品,其实这也无可厚非,关键就在于其作者老爱把...
  • 该培训器同默认剖析器的不同之处在于,他们不装载预先设置的符号数据库,因此扩大了Intellisense的范围。Visual Assist X只收集您工程中的头文件对象信息,这些头文件对象可以包含在系统、第三方库、MFC或ATL/...
  • 安装过程非常简单,就不再赘述,使用DameWare最方便之处在于,只需要在管理员本地机器安装该工具,远程客户机不需要进行任何安装设置,只要知道客户机管理员账号密码,就能顺利完成远程管理维护工作。...
  • arcgis工具

    2012-10-22 22:37:31
    arcgis工具总结 1. 要素剪切与延伸 实用工具 TASK 任务栏 Extend/Trim ...这种方法与完全包含(Completely contain)方法区别在于:要素间边界可以接触。例如,使用包含(Contain)方法,即使湖泊边界包含该...
  • 会计理论考试题

    2012-03-07 21:04:40
    1.PC机中 Intel8088、80286、80386、80486,PemiumPⅡ、PⅢ是指_D_的不同型号。 A、显示器 B、内存储器 C、外存储器 D、微处理器 2.用高级语言来编写的程序 ___D___ 。 A、称为编译软件 B、经编译后,才称为源程序 C...
  • Windows XP(包括 Windows 2000)控制台命令是在系统出现一些意外情况下一种非常有效诊断测试以及恢复系统功能工具。小编的确一直都想把这方面命令做个总结,这次辛苦老范给我们整理了这份实用秘笈。 ...
  • Visual C++ 2005 入门经典 详细书签版

    热门讨论 2013-02-02 16:39:43
    11.1.1 窗口的元素 577 11.1.2 Windows程序与操作系统 579 11.1.3 事件驱动型程序 579 11.1.4 Windows消息 579 11.1.5 Windows API 580 11.1.6 Windows数据类型 580 11.1.7 Windows程序中的符号 581 ...
  • 11.1.1 窗口的元素 577 11.1.2 Windows程序与操作系统 579 11.1.3 事件驱动型程序 579 11.1.4 Windows消息 579 11.1.5 Windows API 580 11.1.6 Windows数据类型 580 11.1.7 Windows程序中的符号 581 ...
  • powerbuilder

    2013-11-21 17:11:48
    不同类型打印机使用不同的控制序列,你需要翻一翻你打印机手册。由于PowerBuilder使用数值0(即ASCII码为0字符)结束每个字符串,因此,如果打印控制序列中包含了数值0,应用程序需要使用其它字符在参数string...
  • 这个项目会视内存模块的不同,为接下来四个项目设定最佳的计时方式。默认值为「By SPD」。这个默认值会读取SPD (Serial Presence Detect) 装置的内容,并且依据SPD内容设定这四个项目。内存模块上的EEPROM (只读...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
     《iphone开发秘籍(第2版)》提供了关于iphone sdk以及iphone开发全面信息,对iphone sdk中各种组件做了深入浅出介绍,包括iphone 3.0 sdk所有新增特性,同时对iphone开发基本流程、基本原理基本原则...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

对话框和窗口的不同之处在于