我在 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() 但它挂在元组中的两个值上。它要么双重打印每个字符串并将整数加在一起,要么简单地返回整数,具体取决于我如何格式化它。
我正在开发一个 GUI 程序,并且打算将一个长时间运行的任务添加到一个事件中,但我发现这会使整个程序冻结很多,所以考虑到其他人的建议,我会让 GUI 只负责启动、停止监视并使长时间运行的任务作为单独的脚本运行。我知道在一个脚本中运行另一个脚本的唯一方法是通过导入,是否有其他方法与另一个脚本进行通信,我的意思是读取另一个脚本的标准输出并在您想要的任何时候终止它?
我有一个 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)
或者,是否有另一种漂亮的方式来指示单元格的内容已更改?
我有一个 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) 我想从带有模块多处理的 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) 我正在处理一个项目,其中一个函数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)
它已经通过了第一个 …
我想在 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) 我试图将动画 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(可能穿线?)。
当我运行此代码时,收到警告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) 我正在尝试创建一个 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) wxpython ×10
python ×8
python-2.7 ×2
python-3.x ×2
dictionary ×1
grid ×1
hide ×1
pyinstaller ×1
sizer ×1
wxwidgets ×1