标签: wxpython

是否可以将列表“设置”为组合框,wxpython?

您好,我知道可以使用列表来执行此操作,但是可以使用组合框执行此操作吗?有没有类似set的函数?

我尝试将 set 与组合框一起使用,但收到以下错误: AttributeError: 'ComboBox' object has no attribute 'Set'

谢谢。

python wxpython

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

在 wxPython 中绘制具有透明/半透明背景的控件有哪些选项?

我正在编写一个 wxPython 应用程序,需要与现有 Windows 应用程序的外观相匹配。我试图将静态文本和按钮控件放在具有渐变背景的面板上。以下是我找到的方法,但我不禁觉得自己错过了一些东西。我应该如何绘制静态文本和自定义控件并让背景显示出来?

  1. 以某种方式说服本机控件不要绘制背景。这尤其适用。到 wxStaticText
  2. 打开全局系统选项 msw.window.no-clip-children让背景透出来?
  3. 传入一个重绘函数,该函数在其 onPaint 处理程序期间修饰每个控件的背景

2 似乎最简单,但我想知道它是否因某种原因被关闭。在全球范围内打开无剪辑儿童是否会对性能产生影响?有什么办法可以只为我想要的窗口打开它吗?

编辑:示例代码和屏幕截图

抱歉,如果这看起来像是问题的答案。我想知道是否有正确的方法可以做到这一点。

三个静态文本控件的屏幕截图。

#!/usr/bin/python
import wx

class GradientPanel(wx.Panel):
    def __init__(self,*args,**kwargs):
        wx.Panel.__init__(self,*args,**kwargs)
        self.Bind(wx.EVT_PAINT,lambda e: self.paintBackground())
        self.Bind(wx.EVT_ERASE_BACKGROUND,lambda e: None)

        self.t=wx.StaticText(self,pos=(30,20),label="wxStaticText. Looks bad on MSW")
        self.t2=MyStaticText(self,pos=(30,50), size=(300,25), label="MyStaticText. Needs ClipChildren turned off")
        self.t3=MyStaticTextWithCustomBackground(self,pos=(30,80),size=(300,25), label="This Control touches up its own background",paintBackgroundToDC=self.paintBackgroundToDC)

    def paintBackground(self):
        dc=wx.PaintDC(self)
        self.paintBackgroundToDC(self,dc)

    def paintBackgroundToDC(self,ofWindow,dc=None):
        r=self.GetScreenRect()
        r.SetTopLeft(ofWindow.ScreenToClient(r.GetTopLeft()))
        dc.GradientFillLinear(r,wx.Colour(240,240,240),wx.Colour(128,128,255),wx.SOUTH)

class MyStaticText(wx.Window):
    def __init__(self,parent,label,**kwargs):
        wx.Window.__init__(self,parent,**kwargs)
        self.label=label
        self.Bind(wx.EVT_PAINT,lambda e: self.repaint())
        self.Bind(wx.EVT_ERASE_BACKGROUND,lambda e: None)

    def repaint(self):
        self.repaintToDC(wx.PaintDC(self))

    def repaintToDC(self,dc):
        dc.DrawText(self.label,0,0)

class MyStaticTextWithCustomBackground(MyStaticText): …
Run Code Online (Sandbox Code Playgroud)

python wxpython

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

wxpython 显示网络摄像头视频时出现闪烁

我是Python新手。我正在尝试编写一个运动检测应用程序。目前,我正在尝试让网络摄像头视频显示在屏幕上。目前的代码一开始没有闪烁,但在调整大小后,闪烁将会回来。有什么线索吗?另外,为什么它在计时器事件中没有 self.Refresh() 的情况下不起作用,除非框架最小化,否则绘制事件不是总是发生?提前致谢。

import wx
import cv

class LiveFrame(wx.Frame):

  fps = 30


  def __init__(self, parent):
    wx.Frame.__init__(self, parent, -1, title="Live Camera Feed")

    self.SetDoubleBuffered(True)
    self.capture = None
    self.bmp = None
    #self.displayPanel = wx.Panel(self,-1)

    #set up camaera init
    self.capture = cv.CaptureFromCAM(0)
    frame = cv.QueryFrame(self.capture)
    if frame:
      cv.CvtColor(frame,frame,cv.CV_BGR2RGB)
      self.bmp = wx.BitmapFromBuffer(frame.width,frame.height,frame.tostring())
      self.SetSize((frame.width,frame.height))
    self.displayPanel = wx.Panel(self,-1)

    self.fpstimer = wx.Timer(self)
    self.fpstimer.Start(1000/self.fps)
    self.Bind(wx.EVT_TIMER, self.onNextFrame, self.fpstimer)
    self.Bind(wx.EVT_PAINT, self.onPaint)

    self.Show(True)

  def updateVideo(self):
    frame = cv.QueryFrame(self.capture)
    if frame:
      cv.CvtColor(frame,frame,cv.CV_BGR2RGB)
      self.bmp.CopyFromBuffer(frame.tostring())
      self.Refresh()


  def onNextFrame(self,evt):
    self.updateVideo()
    #self.Refresh()
    evt.Skip()

  def onPaint(self,evt):
    #if self.bmp: …
Run Code Online (Sandbox Code Playgroud)

python webcam opencv wxpython

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

获取调用事件的对象

如果我有两个对象将调用相同的方法,然后发生一个事件,是否可以看到其中哪个对象调用了该事件?

为了让它更清楚。如果我有两个按钮和一个被调用的方法,那么我会单击它们。在此方法中我可以做什么来查看单击了哪个按钮?

...
buttonA.Bind(wx.EVT_BUTTON ,self.methode)
buttonB.Bind(wx.EVT_BUTTON ,self.methode)
...
...
def methode(self,event)
  #get the button that was clicked 
Run Code Online (Sandbox Code Playgroud)

python events wxpython

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

wxpython:wxpython中的透明面板

在 wxpython 中可以使整个框架透明SetTransparent(val)。但是我可以将其中的单个面板设为透明吗?

我尝试使用panelobj.SetTransparent(val)但没有用。

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title,size=(250, 250))

        topPanel = wx.Panel(self)

        panel1 = wx.Panel(topPanel, -1)
        panel1.SetTransparent(100)
        panel2 = wx.Panel(topPanel, -1)
        panel2.SetBackgroundColour('gray')

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(panel1,1,flag = wx.EXPAND|wx.ALL)
        sizer.Add(panel2,1,flag = wx.EXPAND|wx.ALL)

        topPanel.SetSizer(sizer)



class MyApp(wx.App):
     def OnInit(self):
         frame = MyFrame(None, -1, 'frame')
         frame.Show(True)
         return True

app = MyApp(0)
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)

假设我想为 panel1 设置透明度。

python wxpython python-2.7

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

为 wxPython 编写单元测试

我有一个内置的应用程序,其中包含一个用 wxPython 制作的窗口,其中包含一个用于接受用户输入的文本框,并且该enter事件绑定到一个函数并向其发送一个 wx.Frame 对象。输入值通过以下方式访问self.txt.GetValue()

我需要为该函数编写一些单元测试,但似乎无法找到一种方法来创建参数并将其传递给函数,以便仍然可以使用相同的语句访问该值。

我还发现了许多用于测试 python 应用程序的模块,包括 wxPython 页面(pyunit)上的一个,但如何传递值的主要直觉尚不清楚。

我该怎么做呢?

python unit-testing wxpython

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

Pyinstaller 在 --onefile --windowed 应用程序中嵌入图像文件夹

我正在尝试将包含图像的文件夹嵌入到生成的(使用 PyInstaller)可执行文件中。但这对我不起作用。即使只有一张简单的图像!

我的main.spec文件中的 datas 变量如下所示

datas=[ ('C:\\Users\\<user>\\dir1\\dir2\\MyApp\\images\\*.png', 'images') ],
Run Code Online (Sandbox Code Playgroud)

根据文档:

第一个字符串指定当前系统中的一个或多个文件。第二个指定运行时包含文件的文件夹的名称。

在 python 文件中,我读取了这样的图像:

self.SetIcon(wx.Icon("images\\myicon.png"))
Run Code Online (Sandbox Code Playgroud)

最后,这是我使用 PyInstaller 将所有内容打包到 *.exe 中的方法:

pyinstaller --onefile --windowed --icon=images\main32x32.ico main.spec
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Failed to load image from file "images\myicon.png"
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我做错了什么吗?

python windows wxpython pyinstaller

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

如何在 Jupyter Notebook 中运行“wx python”

如何wx Python在Jupyter笔记本中运行模块并成功执行代码?

wxpython python-3.x jupyter-notebook

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

wxPython,我该如何解雇事件?

我正在制作我自己的按钮类,我用DC绘制的面板的子类,我需要在按下自定义按钮时触发wx.EVT_BUTTON.我该怎么做?

python events wxpython

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

wxPython文件对话框错误:缺少"|" 在通配符字符串中!

我在Windows7上,使用Python 2.6和wxPython 2.8.10.1.我试图让这个打开文件对话框工作,但我遇到了一个奇怪的错误.这对我来说看起来像一个有效的通配符字符串,但每当我选择一个文件并在文件对话框中单击"确定"时,我会得到:

Traceback (most recent call last):
File "D:\Projects\python\wxTest.py", line 92, in OnOpen
self.__DoOpen()
File "D:\Projects\python\wxTest.py", line 101, in __DoOpen
if open_dlg.ShowModal() == wx.ID_OK:
File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_windows.py", line 711, in       ShowModal
return _windows_.Dialog_ShowModal(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion "wxAssertFailure" failed at 
  ..\..\src\common\filefn.cpp(1746) in wxParseCommonDialogsFilter(): 
  missing '|' in the wildcard string!
Run Code Online (Sandbox Code Playgroud)

当对话框打开时,一切看起来都很好.有任何想法吗?

编辑:输入太快,忘了包含有问题的通配符字符串!抱歉...

wcd = "All files(*.*)|*.*|Text files (*.txt)|*.txt|"
open_dlg = wx.FileDialog(self, message='Choose a file', defaultDir=directory, defaultFile='', style=wx.OPEN | wx.CHANGE_DIR)
open_dlg.SetWildcard(wcd)
if open_dlg.ShowModal() == wx.ID_OK:
        path = open_dlg.GetPath()
...
Run Code Online (Sandbox Code Playgroud)

python wxpython

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