我对如何在应用程序中获取顶部框架有点困惑。我以通常的方式开始我的申请
class AppFrame(ClientGUI.MyFrame): #ClientGUI.MyFrame generated by wxformbuilder.
def __init__(self):
# create some panels.
# Create some object classes that invoke objects of other classes.
# .. do other stuff ...
if __name__ == '__main__':
app = wx.App(0)
frame = AppFrame()
frame.Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
鉴于我有一个深度嵌套的类调用序列,我希望调用层次结构底部的一个对象能够访问应用程序中的某个面板(基本上将一些 gui 内容放入该面板中)。我能想到的一种方法是将应用程序对象(“self”)作为参数包含到我的对象调用序列中,以便最后一个对象可以访问应用程序对象。但这似乎相当复杂,因为所有中间对象都不需要访问应用程序。
有没有一种干净的方法来访问应用程序对象?另外,我到底想访问什么——“框架”对象还是“应用程序”对象?我不确定这两个对象之间的区别。
是否可以控制 WXPython 中各个小部件的不透明度?
我知道我可以使用self.SetTransparent(150)使框架透明,有没有办法对单个小部件执行此操作?
我知道这听起来很简单,但是我如何使用 wxpython 删除图像?
我正在使用 wx.StaticBitmap 和 wx.Image 来创建图像,但是有没有办法删除图像?
也许有这样的事情:
bmp1 = wx.Image(filename, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
self.bitmap1 = wx.StaticBitmap(self.sizer, -1, bmp1, (0, 0))
delete_image(self.bitmap1)
delete_image(bmp1)
Run Code Online (Sandbox Code Playgroud)
我尝试替换变量,但图像仍然显示。
我wx.grid.Grid在我的应用程序中使用 a 。调整网格行的大小永远不会有用,所以我很想禁用调整它们大小的功能。这可能吗?我该怎么做?
测试应用程序时,当我尝试单击单元格主体时,我总是不小心单击单元格之间令人惊讶的大边框。行的高度不能超过 20 像素,可单击(可拖动)的边框宽度至少为 3 像素。除了当我打算选择多个单元格时经常意外地重新调整行的事实之外,我真的认为禁用调整大小是值得的。可接受的替代方案是完全禁用单元格之间边框的拖动,但仍然可以通过沿顶部和左侧边缘的标签之间的边框调整行和列的大小。
如何给panel1添加背景图片?有哪个命令?
代码:
import wx
import wx
appy=wx.App()
class cg(wx.Frame) :
def __init__(self,parent,id) :
wx.Frame.__init__(self,parent,id,'GPA',pos=(1000,600),size=(600,400))
#splitter = wx.SplitterWindow(self, -1)
panel1 = wx.Panel(self)
panel2 = wx.Panel(panel1, -1,size=(600,200),style=wx.BORDER_SUNKEN)
panel3 = wx.Panel(panel1, -1,pos=(0,200),size=(600,200),style=wx.BORDER_SUNKEN)
#panel3=wx.panel(panel1,-1,pos=(300,200),size=(600,200),style=wx.BORDER_SUNKEN)
#panel13 = wx.Panel(panel1, -1, style=wx.BORDER_SUNKEN)
#panel13 = wx.Panel(panel1, -1, style=wx.BORDER_SUNKEN)
#panel13 = wx.Panel(panel1, -1, style=wx.BORDER_SUNKEN)
#button1=wx.Button(panel1,label='exit',pos=(10,10),size=(10,10))
#self.cnt1=wx.TextCtrl(panel1,pos=(40,60),size=(120,30))
if __name__=='__main__' :
app=wx.PySimpleApp()
frame=cg(parent=None,id=-1)
frame.Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud) 我试图让这个小文件复制应用程序工作,它显示一个进度条,但我不明白为什么这不起作用,因为它在更新仪表时锁定了 GUI。
import shutil
import os
import threading
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
self.source = os.path.expanduser("~/Desktop/FolderToCopy")
self.destination = os.path.expanduser("~/Desktop/BackupFolder/Temp")
panel = wx.Panel(self, -1)
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
hbox3 = wx.BoxSizer(wx.HORIZONTAL)
hbox4 = wx.BoxSizer(wx.HORIZONTAL)
self.getSourceSize = self.get_size(self.source)
self.gauge = wx.Gauge(panel, -1, self.getSourceSize, size=(150, 25))
self.btn1 = wx.Button(panel, wx.ID_OK)
self.abortButton = wx.Button(panel, label="Abort")
self.Bind(wx.EVT_BUTTON, self.OnButtonSelect, self.btn1)
self.abortButton.Bind(wx.EVT_BUTTON, self.OnAbortButton, self.abortButton)
hbox1.Add(self.gauge, 1, wx.ALIGN_CENTRE)
hbox2.Add(self.btn1, 1, wx.RIGHT, 10)
hbox4.Add(self.abortButton, 1, wx.RIGHT, …Run Code Online (Sandbox Code Playgroud) 当我单击 searchctrl 输入一些代码时,我尝试使用 searchctrl 创建鼠标事件。\n我的目标是当我单击 searchctrl(编辑为文本或 wirte)时,将启动虚拟键盘(板载)。我发现searchctrl是低类别的textctrl。但 wx.EVT_LEFT_DOWN 不起作用\n我怎样才能让它工作(我认为这是可能的。因为当我单击 searchctrl(文本)时 value=\xe2\x80\x9d\xe2\x80\x9d(提示)消失)
\n\n完整代码
\n\n# -*- coding: utf-8 -*-\n\nimport wx\n\n[wxID_FRAME1, wxID_FRAME1TEXTCTRL1,\n] = [wx.NewId() for _init_ctrls in range(2)]\n\nclass MyFrame1 ( wx.Frame ):\n\n def __init__( self, parent ):\n wx.Frame.__init__ ( self, parent, id = wx.ID_ANY,\n title = wx.EmptyString, pos = wx.DefaultPosition,\n size = wx.Size( 700,400 ),\n # style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL\n )\n\n self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )\n\n # Create controls\n sb = wx.StaticBox(self, -1, "Options")\n searchBtnOpt = wx.CheckBox(self, -1, "Search button")\n searchBtnOpt.SetValue(True)\n cancelBtnOpt = …Run Code Online (Sandbox Code Playgroud) 这不完全是我的应用程序,但非常相似。我创建了这个测试代码来显示问题。基本上我试图从 python 线程调用 tcl proc。当结果准备好时,Tcl proc 将回调到 python 函数。该结果将作为事件发布到 wx 框架。当我作为纯 python 代码运行时,它工作得很好。当我使用 tcl proc 时,整个应用程序崩溃,没有任何信息。如果我增加 wait_time (比如 100),那么即使使用 tcl 也能正常工作。是回调率高有问题还是我错过了其他东西。顺便说一句,这个应用程序在 Windows 上运行。
import wx
from Tkinter import Tcl
from threading import Thread
import wx.lib.newevent
from time import sleep
CountUpdateEvent, EVT_CNT_UPDATE = wx.lib.newevent.NewEvent()
tcl_code = 'proc tcl_worker {name max_count delay_time callback} { while {$max_count>0} {after $delay_time; $callback $name $max_count; incr max_count -1}}'
# Option to use Tcl or not for counter
# When enabled, Tcl will callback to python to …Run Code Online (Sandbox Code Playgroud) 我可以加载 JPEG 图像,将其转换为位图并在 wx 应用程序中绘制它。然而,我很难将 PIL 图像对象转换为可以绘制到 wx 应用程序中的位图。
在网上,我能找到的最好的建议是做类似的事情
wx.Bitmap(PIL_image.tobytes())
Run Code Online (Sandbox Code Playgroud)
但是,这给了我以下错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 59: invalid start byte
Run Code Online (Sandbox Code Playgroud)
或者
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 51: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)
有人对如何解决这一点有很好的提示吗?谢谢!
我正在尝试在系统托盘中显示动态文本(这将是 2 个数字(从 1 到 100)每 2 分钟更改一次)。
我发现这个脚本作为起点(但我不致力于它!)。
但我收到这个错误:
TypeError: Image.SetData(): arguments did not match any overloaded call:
overload 1: argument 1 has unexpected type 'str'
overload 2: argument 1 has unexpected type 'str'
OnInit returned false, exiting...
Run Code Online (Sandbox Code Playgroud)
代码的相关部分是:
def Get(self,l,r):
s=""+self.s_line
for i in range(5):
if i<(5-l):
sl = self.sl_off
else:
sl = self.sl_on
if i<(5-r):
sr = self.sr_off
else:
sr = self.sr_on
s+=self.s_border+sl+self.s_point+sr+self.s_point
s+=self.s_border+sl+self.s_point+sr+self.s_point
s+=self.s_line
image = wx.EmptyImage(16,16)
image.SetData(s)
bmp = image.ConvertToBitmap()
bmp.SetMask(wx.Mask(bmp, wx.WHITE)) #sets …Run Code Online (Sandbox Code Playgroud) wxpython ×10
python ×7
bitmap ×1
click ×1
frame ×1
mouseevent ×1
python-3.x ×1
system-tray ×1
tcl ×1
textctrl ×1
tkinter ×1