标签: wxpython

为 wxPython 格式化 dict.items()

我在 wxPython 中有一个文本框,它获取dictionary.items() 的输出,并在将项目添加到字典时将其显示给用户。然而,原始数据非常难看,看起来像

[(u'BC',45)
(u'CHM',25)
(u'CPM',30)]
Run Code Online (Sandbox Code Playgroud)

我知道dictionary.items()是一个元组列表,但我似乎不知道如何制作一个与wxPython的SetValue()方法兼容的好格式。

我尝试过迭代列表和元组。如果我使用print语句,输出就很好。但是当我用 SetValue() 替换print语句时,它似乎只获取每个元组的最后一个值,而不是元组中的两个项目。

我还尝试创建一个字符串并将该字符串传递给 SetValue(),但同样,我只能获取元组中的一项或另一项,而不能同时获取两项。

有什么建议么?


编辑:是的,我将dictionary.items()的结果传递到wxPython应用程序中的文本字段。我只是寻找类似的结果,而不是像上面这样的结果:

BC 45
CHM 25
CMP 30
Run Code Online (Sandbox Code Playgroud)

没什么特别的,只是简单地从每个元组中提取每个值并制作一个可视列表。

我尝试制作一个字符串格式并将其传递给 SetValue() 但它挂在元组中的两个值上。它要么双重打印每个字符串并将整数加在一起,要么简单地返回整数,具体取决于我如何格式化它。

python dictionary wxpython

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

如何在一个Python脚本中控制/调用另一个Python脚本?(脚本之间进行通信)

我正在开发一个 GUI 程序,并且打算将一个长时间运行的任务添加到一个事件中,但我发现这会使整个程序冻结很多,所以考虑到其他人的建议,我会让 GUI 只负责启动、停止监视并使长时间运行的任务作为单独的脚本运行。我知道在一个脚本中运行另一个脚本的唯一方法是通过导入,是否有其他方法与另一个脚本进行通信,我的意思是读取另一个脚本的标准输出并在您想要的任何时候终止它?

python wxpython event-handling

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

wxpython网格单元的背景颜色淡入/淡出

我有一个 wxpython 网格,我正在更改单元格的背景颜色以表明它发生了一些事情。

我想淡入/淡出颜色变化(就像浏览器中的 JavaScript)以获得更平滑的外观。这可以吗?

现在,我只是更改背景颜色,然后在 1.5 秒的间隔后将其更改回来。

def do_stuf(self):
    # ... stuff ...
    wx.CallAfter(self.HighlightCell, row, col)

def HighlightCell(self, row, col):
    self.grid.Table.highlight = (row, col)
    self.grid.ForceRefresh()
    wx.CallLater(1500, self.ClearCellHighlight)

def ClearCellHighlight(self):
    self.grid.Table.highlight = None
    self.grid.ForceRefresh()
Run Code Online (Sandbox Code Playgroud)

然后在虚拟表中,我检查单元格是否需要突出显示:

def GetAttr(self, row, col, kind):
    """
    Use this callback to set the cell's background color
    """
    attr = wx.grid.GridCellAttr()
    if (row, col) == self.highlight:
        attr.SetBackgroundColour("green")
    elif row % 2:
        attr.SetBackgroundColour("white")
    else:
        attr.SetBackgroundColour("#e7ffff")

    return attr
Run Code Online (Sandbox Code Playgroud)

或者,是否有另一种漂亮的方式来指示单元格的内容已更改?

python grid wxpython

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

如何从wxlistbox中获取选定的值

我有一个 wxlistbox.i 需要从 wxlistbox 获取选定的值,现在我只得到 id

self.lvnames.GetSelections().
Run Code Online (Sandbox Code Playgroud)

但我需要值而不是 id。如何?请帮助我...

我的列表框声明是

self.lvnames=wx.ListBox(panel,-1,(10,40),(210,180),self.names, wx.LB_SINGLE)
Run Code Online (Sandbox Code Playgroud)

python wxpython

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

PyInstaller 和多处理

我想从带有模块多处理的 GUI (wxPython) 启动一个简单的 HTTP 服务器。

如果我直接用 Python 启动它,这段代码就可以正常工作。但是在构建版本(使用 PyInstaller 2 或 3)中,如果我启动 multiprogress -> 不是运行函数中的代码,整个应用程序,GUI 会再次启动。有人知道为什么吗?

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import wx, sys, time, thread, datetime, os, platform, multiprocessing, socket
import favicon
from genLicense import load as loadLicense
from licenseDetailDialog import Dialog as licenseDetailDialog

class mp(multiprocessing.Process):
    def __init__(self, queue, func, *args):
        multiprocessing.Process.__init__(self)
        self.queue = queue
        self.func = func
        self.args = args
    def run(self):
        time.sleep(0.1)
        try:
            self.func(*self.args)
        except Exception as e:
            self.queue.put(e)
            print(e)

class MainFrame(wx.Frame):
    def __init__(self, …
Run Code Online (Sandbox Code Playgroud)

python wxpython pyinstaller

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

wxPython 检查c++部分是否被删除

我正在处理一个项目,其中一个函数wx.pyDeadObject Error由于任务延迟而抛出 a 。

我在 wx 中读到过,您可以通过运行来检查 c++ 对象是否仍然存在if self:,但是这在 wxPython 3.0.2 中不再有效。使用 wx 3。

我已将函数修改为以下内容:

def SetData(self, delayedResult):
    if not self or not self.list:
        return
    data = []
    torrents = delayedResult.get()

    for torrent in torrents:
        data.append((torrent.infohash, [torrent.name], torrent, ThumbnailListItemNoTorrent))

    self_exist = True
    list_exists = True

    if not self:
        self_exist = False
    if not self.list:
        list_exists = False

    try:
        self.list.SetData(data)
        self.list.SetupScrolling()
    except wx.PyDeadObjectError:
        print "Self existed: %s and self.list existed: %s" % (self_exist, list_exists)
Run Code Online (Sandbox Code Playgroud)

它已经通过了第一个 …

python wxwidgets wxpython python-2.7

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

wxPython:隐藏小部件并删除剩余空间

我想在 sizer 中隐藏一个小部件,而不是留下空白空间。我不想删除小部件,因为我想稍后再显示它。

有没有办法隐藏小部件并在它移动到一个空间以填充空位后显示显示的小部件?

这是一个留有空格的简单示例:

import wx

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

        sizer = wx.GridSizer(1, 3, 0, 0)

        a = wx.Button(self, -1, 'a')
        b = wx.Button(self, -1, 'b')
        c = wx.Button(self, -1, 'c')

        sizer.Add(a, 0, 0, 0)
        sizer.Add(b, 0, 0, 0)
        sizer.Add(c, 0, 0, 0)

        b.Hide()

        self.SetSizer(sizer)

class MyFrame(wx.Frame):
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, parent=None, title="Remove Spaces")
        panel = MyPanel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(panel, 1, wx.EXPAND)
        self.SetSizer(sizer)
        self.Fit()
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = …
Run Code Online (Sandbox Code Playgroud)

python wxpython hide sizer

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

带有 wxpython 凤凰的动画 gif

我试图将动画 gif 放在 wxpython 面板中,但显然我的 wxpython 版本中没有 animarion 或 adv 包:

In [1]: import wx
In [2]: wx.version()
Out[2]: '4.0.1 gtk3 (phoenix)'
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用 gif 作为一个,wx.Bitmap但当然它不会播放。我知道根据凤凰文档:

https://wxpython.org/Phoenix/docs/html/classic_vs_phoenix.html

gif 处理程序类丢失了,但我想知道是否有任何方法可以在 phoenix 中使用 gif(可能穿线?)。

wxpython python-2.7

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

如何避免 wxPython 中不推荐使用的方法?

当我运行此代码时,收到警告DeprecationWarning: Menu.Append() is deprecated fileMenu.Append(wx.ID_ANY, 'I&mport', imp),我该如何避免?

menubar = wx.MenuBar()
fileMenu = wx.Menu()
fileMenu.Append(wx.ID_NEW, '&New')
fileMenu.Append(wx.ID_OPEN, '&Open')
fileMenu.Append(wx.ID_SAVE, '&Save')
fileMenu.AppendSeparator()
imp = wx.Menu()
imp.Append(wx.ID_ANY, 'Import newsfeed list...')
imp.Append(wx.ID_ANY, 'Import bookmarks...')
imp.Append(wx.ID_ANY, 'Import mail...')
fileMenu.Append(wx.ID_ANY, 'I&mport', imp)
Run Code Online (Sandbox Code Playgroud)

wxpython python-3.x deprecation-warning

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

wxPython - 如何对 ListCtrl 列项目进行排序?

我正在尝试创建一个 CheckListCtrl,您可以通过单击其标题对列中的所有数据进行排序。

在我的代码的基本示例中,我将在下面发布我将“行”设置为元组列表,因为在我的最终版本中,ListCtrl 将显示 SQLite 查询的结果。

到目前为止,我的代码存在的问题:

self.itemDataMap = rows认为我用错了,如果我尝试排序,我会收到此错误消息:TypeError: list indices must be integers or slices, not tuple。那么我如何将它与元组列表而不是字典一起使用?

import wx
import wx.lib.mixins.listctrl as listmix
from wx.lib.agw import ultimatelistctrl as ULC

APPNAME='Sortable Ultimate List Ctrl'
APPVERSION='1.0'
MAIN_WIDTH=300
MAIN_HEIGHT=300

class TestUltimateListCtrlPanel(wx.Panel, listmix.ColumnSorterMixin):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS, size=(MAIN_WIDTH,MAIN_HEIGHT))

        self.index = 0

        self.list_ctrl = ULC.UltimateListCtrl(self, -1, agwStyle=ULC.ULC_REPORT|ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)
        self.list_ctrl.InsertColumn(0, "Make")
        self.list_ctrl.InsertColumn(1, "Model")
        self.list_ctrl.InsertColumn(2, "Year")
        self.list_ctrl.InsertColumn(3, "Color")

        rows = [("Ford", "Taurus", "1996", "Blue"),
                ("Nissan", "370Z", "2010", "Green"),
                ("Porche", …
Run Code Online (Sandbox Code Playgroud)

python user-interface wxpython python-3.x

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