我正在尝试编译 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\nRun Code Online (Sandbox Code Playgroud)\n\n我正在使用命令行来编译程序
\n\ng++ -v `wx-config --version=3.0 --cxxflags` -std=c++11 `wx-config --version=3.0 --libs` app1.cpp\nRun Code Online (Sandbox Code Playgroud)\n\n并获取以下错误日志:错误日志
\n\n完整代码:源代码
\n我有一个带有 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) 我想要一个像这样的布局
框架内部有一个主面板,左侧和右侧有空白填充,另一个子面板位于中间。位于子面板顶部的静态文本元素,更改窗口大小时应正确换行。
我的代码片段如下所示
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) 我试图了解 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) 所以我想向地图添加纹理,但问题是我不太明白为什么在使用不同的缩放尺寸进行缩放时它没有到达正确的位置。
我通常尝试将背景上的纹理位置设置为我的位置,使自己保持在框架的中心:例如,我的纹理大小是 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) 我正在尝试使用 cmake 运行 wxWidget 示例,但无法在我的 C++ 项目(CMakeLists.txt)中包含 wxWidgets 的标头。如果我使用命令运行程序
\ng++ main.cpp `wx-config --cppflags --libs` -o wxTest\nRun Code Online (Sandbox Code Playgroud)\n程序运行并显示窗口。但我该如何使用 CMakeLists.txt 文件来做到这一点。例如,通常我创建一个名为external-libs的单独文件夹,然后在其中创建一个名为whateverlibraryname的文件夹,然后在其中创建一个头文件、src和lib文件夹,我在其中放置头文件、任何源文件和.so文件分别。但就 wxWidgets 而言,我有几个静态库文件,并且标头内有许多单独的文件夹,我不知道如何将它们全部包含在内。他们产生错误:
\nfatal error: wx/wx.h: No such file or directory\n #include <wx/wx.h>\nRun 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) 您好,我正在尝试创建一个 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) 对于我正在构建的应用程序,我使用activex即控件.它工作很好但我不知道如何删除它周围的边框.
我试过覆盖调用调用并将DISPID_BORDERSTYLE设置为零,但看起来它永远不会被击中.
有任何想法吗?
我有一个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) 我有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.