[wxWdiget]使用wxBoxSizer编程

使用 wxWdigets 时发现的好玩的事情--VC++ 编译器怎么找到 WinMain 或 wWinMain 函数 使用 wxWdigets 时,发现可以看到,入口函数是WinMain。在我编译完成 wxWidgets 源代码,并且把编译后的库安装到另一个路径后,我的项目已经脱离了 wxWidgets 源代码目录,也就是说我的项目的编译过程,是不被编译 wxWidgets 代码时的目录结构、配置文件影响的。这种情况下,应该是只需要设置好头文件路径、库路径,就可以正常使用 wxWidgets 了。然而,意想不到的事情发生了。没有找到 wWinMain。当然不会找到,因为 wxWidgets 定义的入口点是。 阅读详情

使用wxBoxSizer编程(按照官方文档翻译,如有不当之处,恕请指正!)


boxsizer基本思想就是让一个窗口的几何布局变得非常简单,比较典型的就是只有一行或者一列,或者是几层结构。

 

举个例子,假如我们要创建一个顶部为文本框,底部为两个按钮的对话框。我们可以把这个对话框看作是具有两层结构的列,顶层的列可以看做是上面为文本框下变为按钮,底层的列可以看做是左侧为ok按钮,右侧为cancel按钮。在很多情况下(特别是Unix下的对话框和正常的框架)主窗口可以根据根据用户要求和子控件的大小来自由调整大小。在我们举得例子中,我们希望文本框能够随着对话窗口大小的改变而改变,而按钮大小却固定不变。另外,所有的控件要使用细边框以保证对话框看起来比较舒服-更糟的要求是-当对话框窗口大小改变时,按钮要始终保持居中显示。

 

Boxsize有一个特性就是它可以朝着两个方向(宽和高)调整大小,但是子控件依照主要调整方向(横向为行)来不均衡分布。在我们举的例子中,我们希望垂直容器的比重扩大只是针对文本区域,而不是按钮区域。而这是由向容器中添加窗口(或另外一个容器)时的比例参数决定的,此参数被当做比重因子,可以设为0或者大于0,设为0就意味着窗口大小不会改变。如果好几个窗口的proportion参数值都大于0,那么proportion参数值要相对于所有窗口的值之和来生效。如果我们添加两个proportion参数值为1的窗口,那么两个窗口大小变化时变化的都一样大,而且总大小都是容器的一半大小。那当列容器的宽度发生改变时我们该怎么办?这个行为是由flags参数(Add()函数的第二个参数(从0开始编号))控制的:0或空指示着窗口将保持原有大小,wxGROW(同wxEXPAND)指示强制窗口跟随容器大小的改变而改变,wxSHAPED参数告诉该窗口按比例调整大小,即保持原有的宽高比。当未使用wxGROW参数时,该窗口的大小可以在可用的空间内指定。wxALIGN_LEFT,wxALIGN_TOP,wxALIGN_RIGHT,wxALIGN_BOTTOM,wxALIGN_CENTER_HORIZONTALwxALIGN_CENTER_VERTICAL按照字面意思描述的那样来对其。WxALIGN_CENTRE(wxALIGN_CENTER)被定义做(wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL)。默认的对齐方式是wxALIGN_LEFT|wxALIGN_TOP

 

如前所述,任何属于容器的窗口可能都会有边框,可以使用wxTOPwxLEFTwxLEFTwxRIGHTwxBOTTOM来指定4条边的哪一条使用边框,或者用wxALL来设置全部4个方向都有边框(你也可以用wxNORTHwxWEST等替代)。可以用二进制|运算符把边框标志位和对齐标志位或在一起,用作上面提到的的Add()函数的第三个参数。边框的大小可以用Add()函数的第四个参数来设置。这样,整个容器的行为和子控件就都可用Add()函数的后三个参数来控制。

 

//示例代码

MyDialog::MyDialog(wxFrame *parent, wxWindowID id, const wxString &title )
        : wxDialog(parent, id, title, wxDefaultPosition, wxDefaultSize,
                   wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
  wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );

  // create text ctrl with minimal size 100x60
  topsizer->Add(
    new wxTextCtrl( this, -1, "My text.", wxDefaultPosition, wxSize(100,60), wxTE_MULTILINE),
    1,            // 垂直方向可拉伸
    wxEXPAND |    // 水平方向自动填充
    wxALL,        //   四周都有边框
    10 );         // 边框宽度为10


  wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );
  button_sizer->Add(
     new wxButton( this, wxID_OK, "OK" ),
     0,           // 水平不可拉伸
     wxALL,       // 四周边框
     10 );        // 边框宽度为10
  button_sizer->Add(
     new wxButton( this, wxID_CANCEL, "Cancel" ),
     0,           // 水平不可拉伸
     wxALL,       // 四周边框
     10 );        // 边框宽度为10
topsizer->Add( button_sizer, 0, // 横向不可拉伸 wxALIGN_CENTER ); //无边框,居中对齐 SetSizer( topsizer ); // 设置topsizer作为布局 topsizer->SetSizeHints( this ); // 设置大小为最小尺寸 }

另外还可以通过wxSizeFlags的方法来为wxSizer指定flags参数。这个类极大的减轻了向wxSizer传递参数的负担。以下代码就是前面那个例子用wxSizeFlags的实现方式:

 

 

MyDialog::MyDialog(wxFrame *parent, wxWindowID id, const wxString &title )
        : wxDialog(parent, id, title, wxDefaultPosition, wxDefaultSize,
                   wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
  wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );


  topsizer->Add(
    new wxTextCtrl( this, -1, "My text.", wxDefaultPosition, wxSize(100,60), wxTE_MULTILINE),
    wxSizerFlags(1).Align().Expand().Border(wxALL, 10));

  wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );


  button_sizer->Add(
     new wxButton( this, wxID_OK, "OK" ),
     wxSizerFlags(0).Align().Border(wxALL, 10));       

  button_sizer->Add(
     new wxButton( this, wxID_CANCEL, "Cancel" ),
     wxSizerFlags(0).Align().Border(wxALL, 10));    

  topsizer->Add(
     button_sizer,
     wxSizerFlags(0).Center() ); 

  SetSizer( topsizer );  

  topsizer->SetSizeHints( this ); 

2025年从零开始:构建你的首个ComfyUI工作流-ComfyUI入门教程 然而,由于它拥有众多的插件节点,以及较为复杂的操作流程,学习起来相对困难。以前面搭建的文生图工作流为例,首先点击功能区的【保存】,然后你的浏览器会出来一个弹窗,你可以进行文件命名,点击确定后浏览器会下载该文件,也就是带“json”后缀的文件,这样我们的工作流就打包成一份文件了。思考一下前面说的,节点是不是需要下载安装才能使用,而我们复用别人的工作流,他用的节点你不一定下载了,因为目前有600多个节点,你不可能全部下载了吧,所以我们日后使用别人的工作流,你会经常出现这样的问题。 阅读详情

相关推荐

计算机网络-自顶向下方法 第三章课后习题答案(第七版)

复习题 R1. a) 就叫这个协议为简单传输协议STP(Simple Transport Protocol)。在发送方,STP从发送进程接收不超过1196字节的数据块、目标主机地址和目标端口号。STP向每个块添加一个4字节的头,并将目标进程的端口号放在头中。STP然后将目标主机地址和结果段提供给网络层。网络层将段交付给目的地主机的STP。目的主机基于STP检查段中的端口号,从段中提取数据,并将数据传递给由端口号标识的进程。 b) 在发送方,STP从发送进程接收不超过1192字节的数据块、目标主机地址和目标端

Erekilu的博客 2万+

wxWidget的简单入门

简单入门 需求 学习完了网络编程后,我不满足于只写一个仅仅有服务器端的东西,就想写一个客户端的一些东西,想学习一个简单的,轻量级的C++UI框架。而wxWidget恰好满足我的需求。 而这里面的思想和我前面提到过的一个简单的UI框架思想大方向都是类似的。 参考 Tutorial 《使用wxWidget进行跨平台程序开发》 Simple 这里直接改编自《官方社区的一个手册》中的一个例子。 大的东...

心灵迷宫 4209

wxWidgets:wxSizer类的使用方法

在wxWidgets中,wxSizer类被用于管理窗口中的布局和控件的自动调整大小。本文将介绍wxSizer类的使用方法,并提供相应的源代码示例。通过以上步骤,您可以使用wxSizer类来管理窗口中的布局和控件的自动调整大小。根据实际需求,您可以选择不同的wxSizer派生类以及设置不同的布局参数来满足您的应用程序需求。在上面的示例代码中,使用Expand()方法设置控件在垂直和水平方向上都可以扩展,使用Border()方法设置控件的边框。要使wxSizer生效,需要将其设置为窗口的布局管理器。

HackDyno的博客 217

wxWdigets在VC2008下的配置

1.选择win32 application工程 2.在工具-选项-VC++目录-包含文件 或 项目-配置-C\C++-附加包含目录中包含wxWidgets安装路径,假设为: E:\wxWidgets-2.9.2\include E:\wxWidgets-2.9.2\include\msvc(此目录下的wx\setup.h会用 #pragma comment自动加载wxWidgets静态库,不

荒野寻龙的专栏 621

Wxwidegets入门

wxWidgets既可以构建为一个大型库(这称为整体构建),也可以构建为几个较小的库(多库构建)。默认为多库构建。 wxWidgets库分为几个库,简要描述如下。下图显示了它们之间的依赖关系: wxBase类 每个wxWidgets应用程序都必须链接到这个库。它包含任何wxWidgets代码所依赖的强制类(例如wxString)和抽象平台间差异的可移植类。wxBase可用于开发控制台模式的应用程序,它不需要任何GUI库可在Unix上运行X Window系统。 wxCore类 基本的GUI类,如

weixin_39775340的博客 440

Windows使用WxWidgets开发界面(c++)环境搭建

一直想学习wxWidgets,之前使用的都是wxPython,现在终于鼓起勇气学习这个了,发现原来是基于vc6.0开发的。所以最好的学习办法就是安装vistual studio 2010,方便学习看代码。wxWidgets里面也有demo。 基本上wxWidgets是和MFC类似的。 参考:http://www.codeproject.com/Articles/11515/Introd

freewebsys的专栏 6627

wxidgets知识点

静态链接库的使用 在E盘建一个文件夹名字是app3,在app3文件夹内建立2个文本文档,文本文档重命名为mylib.cxx、makefile然后保存,makefile的内容是: all:mylib.o g++mylib.o-omylib.exe tt.o:tt.cxx g++-cmylib.cxx-omylib.o PHONY:clean delmylib.o...

weixin_30410119的博客 476

wxPython中wx.BoxSizer用法

wx.BoxSizer是一种可以按行或列排列组件的基本布局工具。

MissYuanxi的博客 897

十四、wxWidgets布局之wxBoxSizer

class LayoutSimple:public wxFrame { public: LayoutSimple(const wxString& title); }; LayoutSimple::LayoutSimple(const wxString& title) :wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(680,280)) { wxBoxSizer *vbox = new wxBoxSizer(...

sq8706的专栏 2909

wx.BoxSizer布局管理

创建wx.BoxSizer: box = wx.BoxSizer(integer orient)orient参数为:(垂直方向)wx.VERTICAL 或(水平方向) wx.HORIZONTAL box.Add(wx.Window window, integer proportion=0, integer flag = 0, integer border = 0)window:需要添加到wx.

技术皮皮虾 1万+

【Python-GUI】wxPython之BoxSizer布局设计基本使用方法

前言:前文学习了使用wxPython来创建窗口,并添加了一个静态的文本信息。 学习目标:通过一个简易计算的界面完成下面的学习 学习一下如何在窗体上设计文本框控件和按钮控件, 通过BoxSizer对控件进行布局设计, 将文本框输入信息和按钮单击事件进行关联处理。 目录 一、设计界面原型 🍁界面元素分析: 🍁界面布局分析: 二、界面设计实现 🍓2.1、窗体初始化 🍓2.2、设置前三个文本框的布局及BoxSizer相关设置逻辑和语法 🍓2.3、设置垂直排列的控件 🍓2.4、将界面出入.

夜*星的博客 2979

wxPython布局管理

其中:proportion参数用于设置当前子窗口在父窗口中所占的空间比例,flag参数是布局标志,用来控制对齐方式、边框和调整尺寸,border参数用于设置边框的宽度。上述代码首先将两个按钮(b1、b2)放到了一个水平盒子布局管理器对象(hbox)中,然后静态文本和(hbox)放到一个垂直方向的盒子布局管理器对象(vbox)中。盒子布局管理器类是wx.BoxSizer,Box布局管理器是最常用的布局管理器,它可以让子窗口沿垂直或者水平方向布局。在前一篇文章中使用了绝对布局,这里主要学习盒子布局。

qq_56891068的博客 1149

一文全面了解 wxWidgets 布局器(Sizers)

大于零的值是根据相应sizer子项中所有伸缩因子的总和来解释的,即如果两个子项都获得伸缩因子1,它们将各自获得一半的额外空间,无论一个控件的最小尺寸是否比另一个差。根据用于相应对话框项的标志,对话框项可以填充所有可用空间,即它会增长到比最小大小更大的尺寸,或者它会移动到可用空间的中心或空间的任一侧。此外,如果 sizer 被分配了一个与其请求的大小不同的尺寸,可以声明列和行是可伸缩的。所有子项都被赋予相同的大小,这是由最大的子项所需的最小大小决定的,在这种情况下是左下角边框中的文本控件。

boom's works 1690

wxWidget编程入门

#include "wx/wx.h"// 定义应用程序类 class MyApp : public wxApp { public:    // 这个函数将会在程序启动的时候被调用    virtual bool OnInit();};// 定义主窗口类 class MyFrame : public wxFrame { public:    // 主窗口类的构造函数    MyF

痞子龙3D编程 4943

实战wxPython:010 - 布局管理之水平布局和垂直布局

wx.BoxSizer继承自wx.Sizer, 因此wx.BoxSizer可调用从wx.Sizer继承而来的方法,比如我们在wx.BoxSizer中最常使用的Add方法,它向Sizer添加一个子控件。在现代GUI桌面程序开发中,一般都有对GUI交互窗口中的控件进行布局的功能,在布局管理中,最常见的两种布局就是水平布局和垂直布局,顾名思义,在水平布局中,所有控件从左到右水平排列,在垂直布局中,控件从上到下垂直排列。比例为0的按钮不会改变,比例为2的按钮在水平长度是比例为1的按钮长度的两倍。

seniorwizard的专栏 1384

WxPython BoxSizer布局详解

boxsizer分为横向和纵向两种,如果你想要把控件水平排列,就使用横向boxsizer,如果你想让控件都垂直排列,就使用纵向boxsizer,当然很多界面既有横向排列又有纵向排列的控件,我们就可以使用boxsizer的嵌套。 思路分析: 整体思路: 先整个窗口Frame 在窗口上建立一个面板Panel,用于放控件(Button,StaticText,TextCtl,CheckBox等控件),尺寸...

Shelly的博客 1万+

学习wxWidgets第4篇:布局layout或sizer

英文水平不行,C++的基础也不行,学习起来很累。几天下来对布局有了一些了解。 有的人把sizer也称为容器,感觉也对,个人理解只要是能在其中放控件的控件都能称为容器。 搞应用程序,每个窗口上的各种各样的控件,如何安排好这些控件,这就是所谓的布局。有的控件要随窗口大小变动而变动,有的控件要保持原有的状态。这在wxwidgets中就是用 sizer来实现。 wxwidgets中的sizer有几种:wxBoxSizer, wxStaticBoxSizer, wxGridSizer, wxFlexGridSi

net990的专栏 2082

wxWidgets:wxStaticText类用法

wxWidgets:wxStaticText类用法wxWidgets:wxStaticText类用法用法详细说明 wxWidgets:wxStaticText类用法 用法详细说明 #include <wx/stattext.h> wxStaticText的继承图 静态文本控件显示一行或多行只读文本。 wxStaticText支持三种经典的文本对齐方式,标签省略,即如果标签不适合提供的空间,则用省略号 ("…") 替换部分文本,并使用wxControl::SetLabelMarkup()格式化标

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1128

wxWigets学习笔记1

1.源代码汉字问题 如果源代码文件编码是utf-8的,无需其他特别处理,可以正常编译wxWidgets程序。如果wxWidgets程序(非控制台程序)不能正常显示或编译,在编译选项上加上(非控制台程序)-finput-charset=UTF-8即可。是否能正常显示与wxWidgets版本有关。 如果源代码格式设置为windows-936,那么含有汉字字符串的文件编译时会出现:error: co

weixian525的专栏 937

wxpython之布局

wxpython布局

weixin_64696832的博客 796

工业仪表读数数据集-zip

数据集介绍表计检测数据集的真值以COCO格式表示,只检测表计一种目标类别,其中训练集有725张图片,测试集有58张图片。 分割数据集分割指针和刻度两种目标类别,其中训练集有374张图片,验证集有40张图片。首先通过目标检测数据集实现图片中工业仪表的检测,然后利用分割数据集实现表盘和表针的分割

上一篇: [wxWidget]wxPanel|wxBoxSizer
下一篇: [wxPython]python3 中文邮件
blems
博客等级 码龄17年 5粉丝 15原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值