Wxpython
LLOJVQE
勤奋
展开
-
Wxpython 定时执行函数CallLater
在wxpython中如果想每隔几秒执行一个函数,用time.sleep是非常不好用的,因为这个线程会被占用,其他操作难以执行。这时我们要用wx.CallLater()class Frame(wx.Frame): def __init__(self): ... self.on_timer() def on_timer(self): self.text.SetLabel(str(random.randint(0, 100)))原创 2022-03-08 09:48:53 · 666 阅读 · 0 评论 -
pywintypes.com_error: (-2147221008, ‘CoInitialize has not been called.‘, None, None)
在使用xlwings多线程时,出现这样的报错,导致Excel表无法打开,是多线程调用的问题。解决方法:import pythoncom# 在这个线程的函数开始运行之前调用这句即可def daily_report(): pythoncom.CoInitialize() # 加入这句 app = xw.App(visible=True, add_book=False) app.display_alerts = False app.screen_updating = T原创 2021-12-20 10:30:28 · 1918 阅读 · 2 评论 -
Wxpython textctrl索引位置错乱,换行符问题
在Textctrl中输入带有换行的文本,通过自定义的搜索函数,会出现索引错误的问题,以下是我的原来的代码def search_text(self, event): print('搜索文本!') keyword = event.GetString() if keyword == self.pre_keyword: if self.pre_search_selection == len(self.search_result)-1: self.pr原创 2021-12-18 11:01:17 · 599 阅读 · 0 评论 -
Wxpython转移键盘焦点至某一控件
比如当我们新建了一个Textctrl控件后text = wx.TextCtrl(self.scrolled_panel, value='', size=(self.text_w, self.text_h),pos=(X, Y))我们想直接把光标移动到这个输入框里,使用父类Window的方法SetFocus()即可text.SetFocus()...原创 2021-12-07 16:48:39 · 316 阅读 · 0 评论 -
Wxpython 解决控件不按布局设定
记录一个小问题的解决下午有一个按钮一直不按设定位置显示,直到后来发现了问题所在,就是Add的时候没有设定proportion的参数原代码:self.btn_sizer.Add(btn, wx.EXPAND | wx.TOP, 40)我发现窗口大小变动的时候按钮位置还会随之等比例改变,我就发现一定是proportion这块的问题,仔细一检查,这里少了个0改为如下,按钮位置回归正常self.btn_sizer.Add(btn,0, wx.EXPAND | wx.TOP, 40)...原创 2021-12-06 19:21:43 · 149 阅读 · 0 评论 -
Wxpython 让页面自动滑到底部
一个垂直方向上滑动的页面,使用如下代码,GetClientSize获取的是页面的大小self.scrolled_panel.Scroll(0,self.GetClientSize()[1])值得注意的一点是,如果有self.scrolled_panel.SetupScrolling()这行代码,一定要在里面加上scrollToTop=False,否则会使页面一直卡在顶部self.scrolled_panel.SetupScrolling(scrollToTop=False)...原创 2021-12-06 18:43:58 · 205 阅读 · 0 评论 -
Wxpython更改Button位置,事件获得按钮位置
在Button的父类wx.Window()中使用Move方法button.Move(100, 200)# 将button移动到(100,200)位置使用event.GetEventObject可以获得button这个控件使用GetPosition()可以获取其位置button = event.GetEventObject()print(button.GetPosition())# 打印button所在位置(X,Y)...原创 2021-12-06 13:45:29 · 1073 阅读 · 0 评论 -
Wxpython更改CoboBox下拉选项
用wx.ComboBox()创建一个下拉框,怎么更新里面的Choices?ComboBox(parent, id=ID_ANY, value="", pos=DefaultPosition,size=DefaultSize, choices=[], style=0, validator=DefaultValidator,name=ComboBoxNameStr)在网上查了很久,终于找到,应该使用SetItems()方法,在wx.ItemContainer这个父类里面self.combo.Set原创 2021-12-02 19:05:53 · 907 阅读 · 2 评论 -
wxpython搜索功能wx.SearchCtrl
先创建搜索框,这里的wx.TE_PROCESS_ENTER会使搜索框接收回车事件,self.search = wx.SearchCtrl(self.right_board, -1, style=wx.TE_PROCESS_ENTER,size=(130,-1))self.search.SetHint('Search') # 设置HintBind一下回车和执行的操作函数self.search_text()self.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN,self.sea原创 2021-11-30 13:45:14 · 725 阅读 · 0 评论 -
wxpython输入文本框,预设灰色文本
wx.TE_LEFT:左对齐wx.TE_MULTILINE:多行文本框,自己会生成滑动条self.text = wx.TextCtrl(self.right_board, -1, size=(820, 400), style=wx.TE_LEFT | wx.TE_NOHIDESEL | wx.TE_MULTILINE)然后设置预设提示文本# 现将字体颜色设置为浅灰色self.text.SetDefaultStyle(wx.TextAttr(wx.LIGHT_GREY))# 然后添加提示文本s原创 2021-11-29 11:15:00 · 662 阅读 · 0 评论 -
wxpython 分割窗口SplitterWindow并让窗口跟随窗口大小
直接上代码了def OperationInterface(self): # 创建一个可分割窗口 self.split_mult = wx.SplitterWindow(self, style=wx.SP_LIVE_UPDATE, size=self.Size) # 先定义左侧按钮面板 self.left_button = wx.Panel(self.split_mult,size=(150,self.split_mult.Size[1]),style=wx.SIMPLE_BORD原创 2021-11-29 10:15:00 · 652 阅读 · 0 评论 -
Wxpython在一个Frame中更改另一个Frame的值
一般我们都是在一个Frame显示的时候用self去更改一些窗口上的元素,那么如何在一个Frame显示的时候去改变另一个Frame中的数据呢?我们可以创建一个GuiManager()类,用以储存Frame,以便后续调用。class GuiManager(): def __init__(self, ): self.frameDict = {} # 用来装载已经创建的Frame对象 def addframe(self, id, frame): self.fr原创 2021-11-19 16:37:37 · 239 阅读 · 0 评论 -
Wxpython设置窗口最小尺寸
使用SetMinSize(self,size)class GuageFrame(wx.Frame): def __init__(self, *args, **kw): # ensure the parent's __init__ is called super(GuageFrame, self).__init__(*args, **kw) self.SetMinSize((400,200)) # 设置最小尺寸这里就是将最小尺寸设置为(400,2原创 2021-11-18 12:37:15 · 780 阅读 · 0 评论 -
Wxpython中多线程任务的平滑进度条设置
首先是进度条的设置class GuageFrame(wx.Frame): def __init__(self, *args, **kw): # ensure the parent's __init__ is called super(GuageFrame, self).__init__(*args, **kw) panel = wx.Panel(self, -1) vbox = wx.BoxSizer(wx.VERTICAL)原创 2021-11-17 18:20:38 · 424 阅读 · 0 评论 -
wxpython wx.Destroy()和wx.Close()区别
在官方文档中有这样一段描述Note that calling Close does not guarantee that the window will be destroyed; but it provides a way to simulate a manual close of a window, which may or may not be implemented by destroying the window.意思是Close()不保证窗口被关闭,但是它提供了一种模拟用户手动关闭窗口的原创 2021-11-16 10:27:23 · 821 阅读 · 0 评论 -
wxpython多线程,可解决进度条在程序后台运行时不动的情况
在前面先定义myThread类import threadingclass myThread(threading.Thread): def __init__(self, command): threading.Thread.__init__(self) self.cmd = command def run(self): print"Starting" + self.cmd os.system(self.cmd)原创 2021-11-15 13:44:15 · 332 阅读 · 0 评论 -
wxpython Frame子窗口Show()之后却没有出现,代码不按照顺序执行。多线程解决
这两天遇到一个难题,研究了一天都没有解决,最后还是在Stack Overflow上找到了答案。问题描述# 初始状态frame = GuageFrame(parent=self, id=-1, title='自动化填写', size=(400, 200))frame.Show()time.sleep(2)# 完成状态frame.gauge.SetValue(100)frame.info.SetLabelText('完成!')这段代码本意是让进度条从窗口显示,然后过2秒后进度条走完,文字原创 2021-11-15 11:48:10 · 590 阅读 · 0 评论 -
wxpython使用gauge创建进条度
class GuageFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Gauge Example', size = (400, 200)) panel = wx.Panel(self, -1) vbox = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL)原创 2021-11-12 18:41:09 · 487 阅读 · 0 评论 -
wxpython 状态栏StatusBar导致布局错乱问题
在窗口中加了个状态栏后,在切换页面时就出现了格式错乱的问题。具体为从首页进入查看学生信息页面时,会覆盖左边操作按钮部分解决方法:回头看代码class UserOperation(wx.Frame): ''' 操作界面 ''' def __init__(self, *args, **kw): # ensure the parent's __init__ is called super(UserOperation, self).__in原创 2021-10-15 12:24:55 · 336 阅读 · 0 评论 -
Wxpython Bind增加传参
对于一般的Bind形式是不能带参数的,比如有一个按钮Button一个回处理函数OnButton(),点击Button触发OnButton()函数self.Bind(wx.EVT_BUTTON, self.OnButton, self.Button)如果我们想给OnButton()传入额外的参数,比如一个导出excel一个导出csv。但是又不想写两个函数怎么办(完全可以写两个只有一小部分不同的OnButton(),但是十分不简洁)这时可以加入一个列表循环,列表里是要传的不同参数,每次都新定义一个cal原创 2021-10-14 12:30:58 · 741 阅读 · 0 评论 -
wxpython菜单界面从mysql导出excel/csv
目录导出函数数据库创建菜单控件导出函数这里使用的是wx.FileDialog,style=wx.FD_SAVE是自带的保存用的内置。值得注意的一点是workbook = xlsxwriter.Workbook(pathname)这里一定要用完整路径,如果只是用文件名,最后也能看见导出文件,只不过会是空白文件。 def export_excel(self, event): op = Sql_operation("login_users") np, fields =原创 2021-10-14 10:50:13 · 242 阅读 · 0 评论 -
Wxpython控件自适应窗口大小GridBagSizer
使用wx.GridBagSizer()使控件能随着用户缩放窗口大小而自动调整,wx.GridBagSizer()把空间用横线和竖线划分成一个个格子,用控价填充这些格子,从而自由的控制布局原来的布局代码:# 创建水平方向box布局管理器hbox = wx.BoxSizer()hbox.Add(vsbox_button, 0, wx.EXPAND | wx.BOTTOM, 5)hbox.Add(self.vsbox_show_operation, 0, wx.EXPAND | wx.BOTTOM, 5原创 2021-10-12 10:18:50 · 1745 阅读 · 1 评论 -
Wxphthon添加菜单
写一个OnClose函数 def OnClose(self, event): dlg = wx.MessageDialog(self, u"未保存的工作将丢失!", "确认退出?", wx.OK | wx.CANCEL | wx.ICON_INFORMATION) result = dlg.ShowModal() dlg.Dest原创 2021-10-10 13:34:37 · 85 阅读 · 0 评论 -
Wxpython添加快捷键(可实现CMD+W关闭程序)
目录添加退出功能到菜单设置快捷键键位退出函数添加退出功能到菜单class UserLogin(wx.Frame): ''' 登录界面 ''' # 初始化登录界面 def __init__(self, *args, **kw): # ensure the parent's __init__ is called super(UserLogin, self).__init__(*args, **kw) # 设置窗口屏幕居原创 2021-10-09 16:28:47 · 558 阅读 · 0 评论 -
Wxpython移动操作焦点(类似实现Tab效果)
今天在做项目的时候,遇到一个问题问题描述因为之前在密码输入栏做了一个回车实现登录的功能,导致出现了一个小问题,在提示弹窗出现的时候按回车(相当于按了YES)这时候操作焦点还在密码输入栏,就会无限出现错误提示弹窗,只有鼠标点击YES才能正常关闭弹窗。解决方法于是尝试在出现弹窗的时候移动操作焦点,类似于在旁边点一下鼠标,最后这个方法只能实现把焦点移动到下一个(也就是用户名输入栏),不过也解决了这个问题。实现十分简单,只需在调用弹窗代码附近加一行event.EventObject.Navigate()原创 2021-10-08 18:31:52 · 359 阅读 · 0 评论 -
Wxpython通过wx.KeyEvent实现回车登录
监控键盘输入执行事件一、回车执行函数二、在做Wxpython的登录界面,通过一个“登录”Button实现了登录功能,那么如何像其他软件/网页一样实现回车=登录一、回车执行函数在登录界面的class里写一个回车执行的函数def ReturnLogin(self,event): keycode = event.GetUnicodeKey() if keycode == wx.WXK_RETURN: self.LoginButton(event) # 调用前面的登录原创 2021-10-07 12:17:55 · 794 阅读 · 0 评论