标签: wxpython

Python/wxPython:在后台持续工作

我正在制作一个用Python运行模拟的程序,带有一个wxPython接口.在程序中,您可以创建模拟,程序为您渲染(=计算)它.有时渲染可能非常耗时.

当用户启动模拟并定义初始状态时,我希望程序在后台连续渲染模拟,而用户可能在程序中执行不同的操作.有点类似于填充的YouTube风格的条形图:您可以仅在渲染点进行模拟.

我该如何运行渲染功能?

python multithreading wxpython background

12
推荐指数
3
解决办法
6624
查看次数

在wxPython中创建主框架的子框架

我正在尝试在wxPython中创建一个新框架,它是主框架的子框架,这样当主框架关闭时,子框架也将关闭.

以下是我遇到的问题的简化示例:

#! /usr/bin/env python

import wx

class App(wx.App):

    def OnInit(self):
       frame = MainFrame()
       frame.Show()
       self.SetTopWindow(frame)
       return True

class MainFrame(wx.Frame):

    title = "Main Frame"

    def __init__(self):
        wx.Frame.__init__(self, None, 1, self.title) #id = 5

        menuFile = wx.Menu()

        menuAbout = wx.Menu()
        menuAbout.Append(2, "&About...", "About this program")

        menuBar = wx.MenuBar()
        menuBar.Append(menuAbout, "&Help")
        self.SetMenuBar(menuBar)

        self.CreateStatusBar()

        self.Bind(wx.EVT_MENU, self.OnAbout, id=2)

    def OnQuit(self, event):
        self.Close()

    def OnAbout(self, event):
        AboutFrame().Show()

class AboutFrame(wx.Frame):

    title = "About this program"

    def __init__(self):
        wx.Frame.__init__(self, 1, -1, self.title) #trying to set parent=1 (id …
Run Code Online (Sandbox Code Playgroud)

python wxpython

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

设计和开发python应用程序后端是不是一个坏主意,然后一旦尝试应用GUI就可以了?

一次完成这一切是否更好?我对wxPython很新,我认为以我熟悉的方式编写程序会更好,然后在我对应用程序的整体设计感到满意后应用wxPython gui.有什么建议?

python wxpython

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

为什么.hide()ing和.Show()面板在wxPython中导致Sizer更改布局?

正如我在上一个问题中所提到的,我试图在功能上做一些类似向导的东西.我已经选择了添加了sizer的单帧.我为每个希望用户看到的屏幕构建面板,将它们添加到框架的sizer中,然后.Hide()通过一个面板在面板之间切换,然后.ShowYourself()在下一个面板上调用自定义面板.显然,我希望按钮与用户在整个过程中保持同一位置.

我通过"后退"和"下一步"按钮将两个面板链接在一个无限循环中,这样你就可以看到发生了什么.第一个小组看起来很棒; tom10的代码在那个级别上工作,因为它避开了我最初的,过度花哨的尝试,边界各处飞行.然后第二个小组似乎缩小到最低限度.当我们返回第一个面板时,这里也发生了收缩.为什么它在第一个面板上看起来很好,但是在我返回后没有?.Fit()如果我不想要10像素乘10像素的灰色,为什么需要调用?如果有必要,为什么会.Fit()给出不一致的结果?

这个无限循环似乎是我对此经历的一个特征:我在面板上修复了布局,但却发现切换会破坏其他面板的布局.我解决了这个问题,通过使用sizer_h.Add(self.panel1, 0)而不是sizer_h.Add(self.panel1, 1, wx.EXPAND),现在我的布局再次关闭.

到目前为止,我的"解决方案"是为mastersizer.SetMinSize((475, 592))每个面板的主sizer 添加一个(在下面的代码中注释掉).这是一个肮脏的解决方案,因为1)我必须找到通过试验和错误工作的数字(宽度为-5像素,高度为-28像素).2)我不明白为什么潜在的问题仍然存在.

什么是正确的,非丑陋的解决方案?如果切换面板不是将所有面板同时添加到框架的大小调整器中,而是应该.Detach()从框架的大小调整器中将面板包含在内,然后.Add()将下一个面板连接到框架的大小调整器上?是否有一种.JustMakeThisFillThePanel()隐藏在wxWidgets和wxPython文档在线的错过的方法?

我显然在布局的心理模型中遗漏了一些东西.粘贴在下面的极简主义代码.

在此输入图像描述

import wx
import sys


class My_App(wx.App):

    def OnInit(self):
        self.frame = My_Frame(None)
        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True

    def OnExit(self):
        print 'Dying ...'


class My_Frame(wx.Frame):

    def __init__(self, image, parent=None,id=-1, title='Generic Title', pos=wx.DefaultPosition, style=wx.CAPTION | wx.STAY_ON_TOP):     

        size = (480, 620)
        wx.Frame.__init__(self, parent, id, 'Program Title', pos, size, …
Run Code Online (Sandbox Code Playgroud)

wxwidgets wxpython sizer

12
推荐指数
2
解决办法
1万
查看次数

wxPython导入错误

我在Python中找出错误消息时遇到了麻烦.

昨天,我使用最新的EPD软件包安装了python,并使用适用于Mac OS的wxPython2.9-osx-cocoa-py2.7软件包安装了wxPython2.9.然后我把wx添加到我的PYTHONPATH中.

export WXDIR=/usr/local/lib/wxPython-2.9.1.1/lib/python2.7/site-packages/wx-2.9.1-osx_cocoa
export PYTHONPATH=$WXDIR
export PYTHONPATH=$PYTHONPATH:$WXDIR/tools
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行东西时,我收到此错误:

In [14]: import matplotlib.pyplot
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)

/Users/imrisofer/Documents/third/hddm-read-only/hddm/<ipython console> in <module>()

/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/matplotlib/pyplot.py in <module>()
     93 
     94 from matplotlib.backends import pylab_setup
---> 95 new_figure_manager, draw_if_interactive, show = pylab_setup()
     96 
     97 @docstring.copy_dedent(Artist.findobj)

/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/matplotlib/backends/__init__.py in pylab_setup()
     23         backend_name = 'matplotlib.backends.%s'%backend_name.lower()
     24     backend_mod = __import__(backend_name,
---> 25                              globals(),locals(),[backend_name])
     26 
     27     # Things we pull in from all backends


/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/matplotlib/backends/backend_wxagg.py in <module>()
     21 
     22 from backend_agg import FigureCanvasAgg
---> 23 import …
Run Code Online (Sandbox Code Playgroud)

python wxpython python-import importerror

12
推荐指数
3
解决办法
2万
查看次数

matplotlib.pyplot和matplotlib.figure有什么区别?

我刚进入matplotlib.

我看到的一些例子matplotlib.pyplot使用,但与wxPython的整合matplotlib时,我经常看到matplotlib.figure

from matplotlib.figure import Figure

...

vboxFigure = wx.BoxSizer(wx.VERTICAL)
self.figure = Figure()
self.axes = self.figure.add_subplot(111)

t = [1,2,3,4,5]
s = [0,0,0,0,0]

self.axes.plot(t,s, 'b-')
self.canvas = FigureCanvas(panel, -1, self.figure)

vboxFigure.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.EXPAND)
hbox.Add(vboxFigure, 1, flag=wx.EXPAND)
Run Code Online (Sandbox Code Playgroud)

使用matplotlib.figure和绘图有什么区别matplotlib.pyplot?可以matplotlib.pyplot用于构建一个wx应用程序吗?

python wxpython matplotlib

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

构建Mac和Windows GUI应用程序

我打算为Mac和Windows构建一个GUI应用程序.我一直在研究技术选择,如语言,库和构建工具,这样我就可以在两个平台之间共享尽可能多的代码.

主要要求是:

  1. 符合Mac App Store的要求.
  2. Mac和Windows上的原生外观.
  3. 需要在Mac上调用Quartz Window Services,在Windows上调用Windows API.
  4. 使用SQLite存储和读取数据.

我的帖子的长度已经失控,所以我把我的问题作为摘要移到了顶部,而上下文更进一步.

问题

  1. 我倾向于使用Python来简化编程.这对我来说是正确的选择吗?如果不是为什么C++会更好?如果是这样,我究竟如何设置py2app和pyobjc来编译python并构建一个为GUI加载XIB的独立应用程序?
  2. 我是否正确,我不应该在Mac上使用跨平台GUI库,以获得更原生的界面?或者我会更好地使用QT或wxWidgets?
  3. 如果我走错路和/或有更好的解决方案我没有考虑过,请指出它们:)

到目前为止我的研究和结论

GUI库

对于Mac,我排除了使用跨平台GUI库(如QT),因为它似乎不能在Mac上提供原生外观(看起来不合适和/或难以编写跟随Apple的应用程序)人机界面指南).wxWidgets说它使用本机库,但是这篇文章提到wxPython可能使用私有的Objective-C调用,并且不太可能被批准用于Mac App Store.最后,即使外观正确,两个平台的布局可能仍需要改变.

因此,我计划在Mac界面中使用原生Cocoa GUI库,但仍考虑将wxWidgets用于Windows GUI.

语言

对于主应用程序逻辑来说,似乎我最好的语言选择是C++或Python.显然,使用Python编写跨平台代码比使用C++更容易,但总是存在权衡.

蟒蛇

优点:更快写入和更容易维护.强大的跨平台库,可以大大缩短开发时间.

缺点:使用Python意味着使用PyObjC,它已经超过一年没有更新(从svn可以看出),我不清楚它是否仍然适用于未来版本的Xcode和OSX.此外,使用PyObjc和py2app设置任何理智的构建配置,并在Xcode之外使用xibs进行GUI,这是一场噩梦.

C++

优点:更容易在Mac和Windows上设置构建配置和依赖项.运行速度比Python快得多,但在我的情况下性能并不是一个大问题.

缺点:我不懂C++.我对C非常好,但看起来这并不能帮助我写好C++.我的总体印象是编写跨平台C++要困难得多,但我可能错了.有很多关于晦涩的错误的帖子.虽然Boost看起来很有希望.

构建工具

如果在两个平台上使用C++作为主要语言,那么设置起来似乎很简单.如果我使用Python,在Windows上设置似乎也很简单,因为我会使用wxWidgets进行GUI和py2exe部署.

至于Mac和Python,标准选择似乎是pyobjc和py2app.不幸的是,我没有找到任何使用pyibapp构建配置的例子,它使用XIB和Cocoa库而不是QT或wxWidgets.我不希望Xcode管理构建,因为我更喜欢将Python文件和应用程序资源放在Xcode项目目录之外.这将大大简化Windows的设置并使文件树更清晰.

关于QT的编辑:我再看看QT,花了几个小时和QT设计师一起玩.基本UI元素(按钮,文本字段,标签)看起来与Cocoa元素相同.我轻松地将QWindow和QTabView与一些元素组合在一起,它看起来像一个Cocoa应用程序.但是,有一些负面因素:

  • 行为有点偏,如缺乏弹性滚动,QTextEdit没有指示焦点的蓝色阴影.
  • QTableView看起来不像它的Cocoa对应物.
  • 元素之间的间距,与父视图的间距,不遵循准则.它通常可以通过调整布局来修复,但需要在任何地方完成,我会免费使用Xcode.
  • 缺少用于制作检查员的HUD元素.这是我在我的应用程序中很可能需要的东西,至少在Mac方面是这样.
  • 可访问性支持不佳.

我知道我很挑剔,但需要挑剔才能做出好的UI.整体QT似乎是Windows的一个很好的解决方案,但我想我会坚持使用Cocoa for Mac.我对现有程序进行了一些额外的研究,发现VLC,ChromeTransmission都为Mac制作原生GUI,而VLC使用QT for Windows,Chrome使用自定义框架,而Transmission使用GTK +和QT for Linux.

我想我已经决定使用Cocoa GUI for Mac和Qt或wxWidgets for Windows,但仍然在C++和Python之间分配共享逻辑.

c++ python wxpython cross-platform py2app

12
推荐指数
2
解决办法
8772
查看次数

使列宽占用wxPython ListCtrl中的可用空间

我的三个栏目wx.ListCtrl(size=(-1,200)).我希望列在其创建后填充ListCtrl的宽度.理想情况下,第一列可以扩展以填充可用的额外空间.第二列和第三列不需要扩展,并且优选地不会改变宽度(格式化ocd).

目前,每个ListCtrl列都是使用设置的(width=-1).

我有一种感觉,我可以使用这段代码对我有利...

# Expand first column to fit longest entry item
list_ctrl.SetColumnWidth(0, wx.LIST_AUTOSIZE)
Run Code Online (Sandbox Code Playgroud)

伪代码(也许):

# After wx.ListCtrl creation
Get width of ListCtrl control
Get width of each ListCtrl column
Calculate unused width of ListCtrl
Set first column width to original width + unused width
Run Code Online (Sandbox Code Playgroud)

添加:

鉴于以下示例,我不明白如何启动autowidthmixin.目前,我正在尝试将listctrl放在foldpanel中.foldpanel是一个类,类中的函数创建listctrl.鉴于我目前的代码结构,我甚至不相信这可以做到!

class MyPanel(wx.Panel):

    def __init__(self, parent, dictionary):
        self.dictionary = dictionary
        """Constructor"""
        wx.Panel.__init__(self, parent)

        # Layout helpers (sizers) and content creation (setPanel)
        self.mainSizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(self.mainSizer)
        list_ctrl = self.setPanel()
        self.mainSizer.Add(list_ctrl, 0, …
Run Code Online (Sandbox Code Playgroud)

python wxpython

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

在wxpython中按下按钮后使用wx.TextCtrl和显示数据的简单示例 - wx的新增内容

我正在学习python并尝试使用wxpython进行UI开发(也没有UI exp).我已经能够创建一个带有面板,按钮和文本输入框的框架.我希望能够在文本框中输入文本,并让程序在单击按钮后对输入到框中的文本执行操作.我可以获得一些指导如何做到这一点?例如,假设我想在面板上显示输入到wx.TextCtrl控件的文本..我该怎么做?

import wx
class ExamplePanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.quote = wx.StaticText(self, label="Your quote :", pos=(20, 30))

        # A button
        self.button =wx.Button(self, label="Save", pos=(200, 325))

    self.lblname = wx.StaticText(self, label="Your name :", pos=(20,60))
    self.editname = wx.TextCtrl(self, value="Enter here your name", pos=(150, 60), size=(140,-1))


app = wx.App(False)
frame = wx.Frame(None)
panel = ExamplePanel(frame)
frame.Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)

python wxpython

12
推荐指数
1
解决办法
4万
查看次数

Python GUI应用程序重新分发

我需要开发一个中小型桌面GUI应用程序,由于时间限制,最好使用Python作为首选语言.

我有哪些GUI库选项允许我独立地重新分发我的应用程序,假设用户没有可用的Python安装,显然没有我正在使用的GUI库?

另外,我如何为每个目标操作系统打包大小合理的二进制文件?(我的主要目标是Windows和Mac OS X)

另外: 我一直在关注WxPython,但是我发现了大量的恐怖故事,用cx_freeze包装它并获得30mb +二进制文件,并且没有关于如何实际进行包装以及如何信任它的真实建议.

python user-interface wxpython distribution freeze

11
推荐指数
2
解决办法
5173
查看次数