wx(和wxPython)在PyQt中有两个我错过的事件:
EVT_IDLE那被发送到一个框架.它可用于根据应用程序的状态更新各种小部件EVT_UPDATE_UI 当它必须重新绘制和更新时,它被发送到一个小部件,所以我可以在处理程序中计算它的状态现在,PyQt似乎没有这些,PyQt书建议编写一个updateUi方法并手动调用它.我甚至最终每0.1秒从计时器调用一次,以避免许多手动调用来自可能更新GUI的方法.我错过了什么吗?有没有更好的方法来实现这一目标?
一个例子:我有一个简单的应用程序,带有一个启动按钮,启动一些处理.只有在使用菜单打开文件时才应启用开始按钮.此外,状态栏上还有一个显示信息的永久小部件.
我的申请表明:
在Wx中,我将按钮的更新UI事件处理其状态:其上的文本以及是否已启用,具体取决于应用程序状态.状态栏也是如此(或者我使用EVT_IDLE).
在Qt中,我必须在几个可能影响状态的方法中更新按钮,或者只是创建一个update_ui方法并在计时器中定期调用它.什么是更"QT"的方式?
我正在使用wxpython处理osx的应用程序.我想在用户点击窗口关闭按钮时最小化窗口到停靠栏,以便可以从停靠栏恢复它.我怎样才能做到这一点?目前我有恢复窗口的问题,因为它在用户点击关闭按钮时被破坏.我怎么能防止这种情况?
提前致谢
我有一个只有一个孩子的wx.Frame.在设置子项的wx.Sizer时,我可以使用wx.SHAPED标志,该标志可以保持子项的宽高比.但是,Frame的纵横比仍然具有完全的自由度,并且会在孩子未使用的区域留下空白区域.
如何在调整大小期间锁定wx.Frame的宽高比?
我的程序用于wx.ProgressDialog提供有关多个阶段的流程的反馈.在每个阶段的开始,我使用第二个参数Update来更改对话框中的消息.
问题是对话框的宽度是根据构造函数中的消息确定的,如果稍后调用Update将消息设置为更长的时间,则不会调整对话框的大小.
除了在构造函数中给出一条长消息之外,有没有办法让对话框更大?
我有一个Vertex对象列表,每个对象都有自己的标签和id.如何将此列表用作wxPython ComboBox的模型,以便在用户选择选项时,我可以立即检索Vertex id?
似乎ComboBox只接受字符串作为模型.我无法创建标签到id对的字典,因为有重复的标签.
我注意到一个ComboCtrl类,我可以创建一个专门的组合框子类,但我觉得有一个更简单的解决方案.
有许多类似的问题,但没有一个答案出现在现场 - 所以请耐心等待.
我正在努力学习使用Python的OOP,但我一直遇到错误(比如这个),这让我觉得这一切都没有意义,只是使用方法会更容易.
这是我的代码:
Run Code Online (Sandbox Code Playgroud)class TheGUI(wx.Frame): def __init__(self, title, size): wx.Frame.__init__(self, None, 1, title, size=size) # The GUI is made ... textbox.TextCtrl(panel1, 1, pos=(67,7), size=(150, 20)) button1.Bind(wx.EVT_BUTTON, self.button1Click) self.Show(True) def button1Click(self, event): #It needs to do the LoadThread function! class WebParser: def LoadThread(self, thread_id): #It needs to get the contents of textbox! TheGUI = TheGUI("Text RPG", (500,500)) TheParser = WebParser TheApp.MainLoop()
所以我遇到的问题是GUI类需要使用WebParser类中的函数,而WebParser类需要从GUI类中存在的文本框中获取文本.
我知道我可以通过将对象作为参数传递来做到这一点,但这似乎完全没有意义,必须有一种更合乎逻辑的方法来做到这一点,不使用类似乎毫无意义?
提前致谢!
我的应用程序有一个类似shell的控制台,在每个命令后都会提示">>>".问题是每次我有我的shell WriteText(">>>")时,它还会附加一个新行.用户可以退格到正确的行,但这看起来很糟糕.有什么办法解决吗?
编辑:这是我的错字.出于某种原因,我无法在GetEventObject之后看到缺少parantheses.
码:
def onKeyDown(self, event):
ESC_list = [self.topic_control,self.search_control]
print event.GetEventObject() in ESC_list
keycode = event.GetKeyCode()
print keycode == wx.WXK_ESCAPE
if keycode == wx.WXK_ESCAPE and event.GetEventObject in ESC_list:
print "fire"
self.onExit(event)
event.Skip()
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,两个print语句都给我"True",if条件不执行.是什么赋予了?
为什么这个正则表达式不起作用?
import re
i="<wx._controls.Button; proxy of <Swig Object of type 'wxButton *' at 0x2d040b0> >"
m = re.match("controls(.*)[;]", i)
if m:
print m.group(1)
Run Code Online (Sandbox Code Playgroud)
它什么都不返回.我试图让一切介于两者之间,"控制"和";" 此解决方案适用于其他测试用例,但不适用于此测试用例.
我正在创建一个界面,我需要点击一个按钮打开一个新窗口.所以我创建了主窗口,并创建了所有按钮,并在类下创建了新窗口.我不完全确定是否需要,但我也会包含这些信息.python的新手很抱歉,如果它充满了错误.
如果有人也可以在打开另一个窗口时回答如何隐藏主菜单,那就太棒了.干杯.
import wxversion
wxversion.select("2.8")
import wx
class App(wx.App):
def OnInit(self):
frame = window()
frame.Show()
self.SetTopWindow(frame)
return True
class window(wx.Frame):
title = "Main Menu"
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,'Window', size=(1000,700))
panel=wx.Panel(self, -1)
self.SetBackgroundColour(wx.Colour(100,100,100))
self.Centre()
self.Show()
status=self.CreateStatusBar()
menubar=wx.MenuBar()
filemenu=wx.Menu()
exitmenu = filemenu.Append(wx.NewId(),"Exit", "Exit Program")
menubar.Append(filemenu,"File")
self.Bind(wx.EVT_MENU, self.onExit, exitmenu)
self.SetMenuBar(menubar)
font1 = wx.Font(30, wx.MODERN, wx.NORMAL, wx.NORMAL, False, u'Consolas')
Text1=wx.StaticText(panel, -1, "Rhythm Trainer", (10,15))
Text1.SetFont(font1)
Text1.SetForegroundColour('white')
self.Show(True)
btn1 = wx.Button(panel, label='Basic', pos=(100,200), size=(150, 50))
btn1.SetFont(wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, u'Consolas'))
btn1.Bind( wx.EVT_BUTTON, window2)
btn2 = …Run Code Online (Sandbox Code Playgroud)