标签: wxwidgets

错误:“virtual bool wxTopLevelWindowGTK::Show(bool)”无法访问

我正在尝试编译 wxWidgets 第一个示例命令行,并收到以下错误

\n\n
/usr/local/include/wx-3.0/wx/gtk/toplevel.h: In member function \xe2\x80\x98virtual bool MyApp::OnInit()\xe2\x80\x99:\n/usr/local/include/wx-3.0/wx/gtk/toplevel.h:63:18: error: \xe2\x80\x98virtual bool wxTopLevelWindowGTK::Show(bool)\xe2\x80\x99 is inaccessible\n     virtual bool Show(bool show = true);\n                  ^\napp1.cpp:36:19: error: within this context\n   frame->Show(true);\n                   ^\napp1.cpp:36:19: error: \xe2\x80\x98wxTopLevelWindowGTK\xe2\x80\x99 is not an accessible base of \xe2\x80\x98MyFrame\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在使用命令行来编译程序

\n\n
g++ -v `wx-config --version=3.0 --cxxflags` -std=c++11 `wx-config --version=3.0 --libs` app1.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n

并获取以下错误日志:错误日志

\n\n

完整代码:源代码

\n

c++ wxwidgets

1
推荐指数
1
解决办法
471
查看次数

在wx.Notebook上的Panel上展开wx.GridBagSizer的子元素

我有一个带有 wx.Notebook 的简单应用程序,它看起来像这样:

在此输入图像描述

为了布局它的子元素,我使用了 wx.GridBagSizer - 它工作得很好。然而,我遇到了一个小但烦人的问题。当我展开 wx.Notebook 的窗口时,它不会展开所有元素并导致窗口如下所示:

在此输入图像描述

这实际上不是我想要的。我应该如何修改代码以便在调整窗口大小时能够展开所有子元素?干杯:)

我的代码很简单:

import wx
import wx.richtext

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title='wx.Notebook')
        book = wx.Notebook(self)
        page = MyPage(parent=book)
        book.AddPage(page, 'Page 1')
        book.AddPage(MyPage(book),'Page 2')
        book.AddPage(MyPage(book),'Page 3')
        self.SetSize(wx.Size(320,250))
        self.Centre()

class MyPage(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, size=(0,0))
        # create sizer to add a border

        bagSizer = wx.GridBagSizer(15, 10)

        mainSizer = wx.BoxSizer(wx.VERTICAL)
        label = wx.StaticText(self, label="Text:")

        self.content1 = wx.TextCtrl(self, size=(300, 20))
        self.content2 = wx.richtext.RichTextCtrl(self, size=(300, 100), style=wx.TE_MULTILINE)

        bagSizer.Add(self.content1, pos=(0, 0), flag=wx.TOP | wx.LEFT …
Run Code Online (Sandbox Code Playgroud)

python layout wxwidgets wxpython

1
推荐指数
1
解决办法
1198
查看次数

面板中的填充和 wxpython 中的静态文本换行

我想要一个像这样的布局

在此输入图像描述

框架内部有一个主面板,左侧和右侧有空白填充,另一个子面板位于中间。位于子面板顶部的静态文本元素,更改窗口大小时应正确换行。

我的代码片段如下所示

import wx

class MyPanel(wx.Panel):
    def __init__(self, parent):
        super(MyPanel, self).__init__(parent)

        self.hsizer = wx.BoxSizer()
        self.hsizer.AddStretchSpacer()

        self.panel = wx.Panel(self)
        self.panel.SetSize((350, -1))

        self.vsizer = wx.BoxSizer(wx.VERTICAL)

        label = (
            "This is a long scentence that I want it wrapped properly, "
            "but it doesn't seem to work at work. "
            "I prefer if you guys can give any sugeestions or help. "
            "For Long Long Long Long Long scentence."
        )
        style = wx.ALIGN_LEFT
        self.static_text = wx.StaticText(self, label=label, style=style)
        self.vsizer.Add(self.static_text, flag=wx.EXPAND | wx.ALL …
Run Code Online (Sandbox Code Playgroud)

python layout user-interface wxwidgets wxpython

1
推荐指数
1
解决办法
4021
查看次数

wxPanel和wxFrame之间的交互

我试图了解 wxFrame 和 wxPanel 如何协同工作。我很难解释以下代码行为:

我正在尝试为我的应用程序设置 GUI。我有一个创建数据输入表单的函数:

void MyFrame::Initialize_Project_Info() {


//Info_Panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(600, 1000), wxTAB_TRAVERSAL, _T(""));

//Info_Panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T(""));

Info_Box = new wxBoxSizer(wxHORIZONTAL);
Info_Staticbox = new wxStaticBoxSizer(wxHORIZONTAL, Info_Panel, _T("Project Information"));
Info_Grid = new wxFlexGridSizer(4, 2, 0, 0);


//Note wsSize(width,height).
Project_Name = new wxStaticText(Info_Panel, wxID_ANY, _T("Project:"));
Engineer_Name = new wxStaticText(Info_Panel, wxID_ANY, _T("Engineer:"));
CrossSection_Name = new wxStaticText(Info_Panel, wxID_ANY, _T("Cross Section ID:"));
Additional_Notes = new wxStaticText(Info_Panel, wxID_ANY, _T("Additional Notes:"));


Enter_PN = new wxTextCtrl(Info_Panel, …
Run Code Online (Sandbox Code Playgroud)

c++ wxwidgets

1
推荐指数
1
解决办法
870
查看次数

在特定位置缩放图像 - 居中

所以我想向地图添加纹理,但问题是我不太明白为什么在使用不同的缩放尺寸进行缩放时它没有到达正确的位置。

我通常尝试将背景上的纹理位置设置为我的位置,使自己保持在框架的中心:例如,我的纹理大小是 1500x1600,我位于该图片中的 X140,Y590(是的,坐标是当我检查控制台时正确检索),放大一些值并缩放纹理并将其位置设置为我所在的位置。

代码如下:

if (!areTexturesInit) {
        InitiateTextures();
        areTexturesInit = true;
    }

    wxBitmap bit(imageTest);
    wxPaintDC dc(this);

    double zoomSize = 0.9; // here I'm applying the zooming proportions ( 0.1 - bigger size of the texture, 0.9 - more zoomed in )

    this->SetSize(wxSize(386, 386)); // size of the main frame

    backgroundSize.x = GetSize().x; // get the size of the main frame
    backgroundSize.y = GetSize().y;

    middlePoint.x = (backgroundSize.x / 2); // calculate the middle point of the frame
    middlePoint.y = (backgroundSize.y …
Run Code Online (Sandbox Code Playgroud)

c++ wxwidgets

1
推荐指数
1
解决办法
904
查看次数

如何在 CMake 项目中包含 wxWidgets 标头

我正在尝试使用 cmake 运行 wxWidget 示例,但无法在我的 C++ 项目(CMakeLists.txt)中包含 wxWidgets 的标头。如果我使用命令运行程序

\n
g++ main.cpp `wx-config --cppflags --libs` -o wxTest\n
Run Code Online (Sandbox Code Playgroud)\n

程序运行并显示窗口。但我该如何使用 CMakeLists.txt 文件来做到这一点。例如,通常我创建一个名为external-libs的单独文件夹,然后在其中创建一个名为whateverlibraryname的文件夹,然后在其中创建一个头文件、src和lib文件夹,我在其中放置头文件、任何源文件和.so文件分别。但就 wxWidgets 而言,我有几个静态库文件,并且标头内有许多单独的文件夹,我不知道如何将它们全部包含在内。他们产生错误:

\n
fatal error: wx/wx.h: No such file or directory\n #include <wx/wx.h>\n
Run Code Online (Sandbox Code Playgroud)\n

我使用的是Ubuntu 18.04,我的项目目录结构如下:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 source\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 external-libraries\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wxWidgets\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 headers\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 msvc\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wx\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wx\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 android\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aui\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dfb\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 …
Run Code Online (Sandbox Code Playgroud)

c++ wxwidgets cmake include-path c++11

1
推荐指数
1
解决办法
4477
查看次数

在wxWidgets中创建一个无标题/无边框的可拖动wxFrame

您好,我正在尝试创建一个 wxApp,它没有默认提供的标题栏(包括最小化、最大化和关闭)图标。我的代码如下: main.h

class MyApp : public wxApp
{
  public:
    virtual bool OnInit();
};

Run Code Online (Sandbox Code Playgroud)

主程序

bool MyApp::OnInit()
{

    MyFrame *prop = new MyFrame(wxT("MyFrame"));
    prop->Show(true);

    return true;
}
Run Code Online (Sandbox Code Playgroud)

myframe.h

class MyFrame : public wxFrame
{
public:
  MyFrame(const wxString& title);
  
  void OnClick(wxMouseEvent& event);

};
Run Code Online (Sandbox Code Playgroud)

myframe.cpp

MyFrame::MyFrame(const wxString& title)
    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 130))
{
  MyPanel *panel = new MyPanel(this, wxID_ANY);
  panel->SetBackgroundColour(wxColour(255,255,255));
  MyButton *button = new MyButton(panel, wxID_ANY, wxT("Ok"));

  Connect( wxEVT_LEFT_UP, 
      wxMouseEventHandler(MyFrame::OnClick));

  panel->Centre();
}


void MyFrame::OnClick(wxMouseEvent& event) 
{
  std::cout << "event …
Run Code Online (Sandbox Code Playgroud)

c++ events wxwidgets draggable c++11

1
推荐指数
1
解决办法
1497
查看次数

删除activex上的边框即控件

对于我正在构建的应用程序,我使用activex即控件.它工作很好但我不知道如何删除它周围的边框.

我试过覆盖调用调用并将DISPID_BORDERSTYLE设置为零,但看起来它永远不会被击中.

有任何想法吗?

c++ windows wxwidgets activex visual-studio-2008

0
推荐指数
1
解决办法
1957
查看次数

wxPython:如何将Button的大小缩小到标签文本的宽度?

我有一个FlexGridSizer,我添加了一堆TextCtrl,其中一些是供用户输入路径,所以我在那些TextCtrl框右侧的相邻列中有一个Button.标签文本是......我只在其中使用TextCtrl的列上调用AddGrowableCol ...这是我在for循环中添加Button的方法(我不使用addmany):

widgetItem = wx.Button(parent, -1, "...")
widgetItem.row=rowNum
widgetItem.col=colNum
widgetItem.target = lastTextBox
self.Bind(wx.EVT_BUTTON, self.getFile, widgetItem)
currentSizer.AddF(widgetItem, wx.SizerFlags(0).Border(wx.ALL, 5))
Run Code Online (Sandbox Code Playgroud)

wxwidgets wxpython

0
推荐指数
1
解决办法
1439
查看次数

wxEffects未定义

我有MSVC++ 15和wxwidgets-3.1.0.我正在阅读使用wxWidgets(2005)的跨平台GUI编程一书.我坚持第5章"绘图和打印"中的代码:

#include <wx/effects.h>

void MyWindow::OnErase(wxEraseEvent& event){

    wxClientDC* clientDC = NULL;

    if (!event.GetDC())
        clientDC = new wxClientDC(this);
    wxDC* dc = clientDC ? clientDC : event.GetDC() ;
    wxSize sz = GetClientSize();
    wxEffects effects;
    effects.TileBitmap(wxRect(0, 0, sz.x, sz.y), *dc, m_bitmap);

    if (clientDC)
        delete clientDC;
}
Run Code Online (Sandbox Code Playgroud)

当我编译上面的代码时,我收到错误:Identifier "wxEffects" is undefined.

c++ wxwidgets

0
推荐指数
1
解决办法
66
查看次数