标签: wxpython

Wx在PyQt中的空闲和UI更新事件

wx(和wxPython)在PyQt中有两个我错过的事件:

  • EVT_IDLE那被发送到一个框架.它可用于根据应用程序的状态更新各种小部件
  • EVT_UPDATE_UI 当它必须重新绘制和更新时,它被发送到一个小部件,所以我可以在处理程序中计算它的状态

现在,PyQt似乎没有这些,PyQt书建议编写一个updateUi方法并手动调用它.我甚至最终每0.1秒从计时器调用一次,以避免许多手动调用来自可能更新GUI的方法.我错过了什么吗?有没有更好的方法来实现这一目标?


一个例子:我有一个简单的应用程序,带有一个启动按钮,启动一些处理.只有在使用菜单打开文件时才应启用开始按钮.此外,状态栏上还有一个显示信息的永久小部件.

我的申请表明:

  1. 在打开文件之前(在此状态下,状态栏显示特殊内容并禁用启动按钮)
  2. 文件已打开且未开始处理:启动按钮已启用,状态栏显示其他内容
  3. 处理正在运行:开始按钮现在显示"停止",状态栏报告进度

在Wx中,我将按钮的更新UI事件处理其状态:其上的文本以及是否已启用,具体取决于应用程序状态.状态栏也是如此(或者我使用EVT_IDLE).

在Qt中,我必须在几个可能影响状态的方法中更新按钮,或者只是创建一个update_ui方法并在计时器中定期调用它.什么是更"QT"的方式?

python qt wxpython pyqt

2
推荐指数
1
解决办法
2391
查看次数

如何使用wxpython禁用OSX中的窗口关闭按钮?

我正在使用wxpython处理osx的应用程序.我想在用户点击窗口关闭按钮时最小化窗口到停靠栏,以便可以从停靠栏恢复它.我怎样才能做到这一点?目前我有恢复窗口的问题,因为它在用户点击关闭按钮时被破坏.我怎么能防止这种情况?

提前致谢

macos wxpython

2
推荐指数
1
解决办法
2702
查看次数

wxwidgets/wxPython:在保持宽高比的同时调整wxFrame的大小

我有一个只有一个孩子的wx.Frame.在设置子项的wx.Sizer时,我可以使用wx.SHAPED标志,该标志可以保持子项的宽高比.但是,Frame的纵横比仍然具有完全的自由度,并且会在孩子未使用的区域留下空白区域.

如何在调整大小期间锁定wx.Frame的宽高比?

wxwidgets wxpython resize frame aspect-ratio

2
推荐指数
1
解决办法
5625
查看次数

wx.ProgressDialog太小了

我的程序用于wx.ProgressDialog提供有关多个阶段的流程的反馈.在每个阶段的开始,我使用第二个参数Update来更改对话框中的消息.

问题是对话框的宽度是根据构造函数中的消息确定的,如果稍后调用Update将消息设置为更长的时间,则不会调整对话框的大小.

除了在构造函数中给出一条长消息之外,有没有办法让对话框更大?

python wxpython

2
推荐指数
1
解决办法
1177
查看次数

如何在wxPython ComboBox中存储字符串以外的对象?

我有一个Vertex对象列表,每个对象都有自己的标签和id.如何将此列表用作wxPython ComboBox的模型,以便在用户选择选项时,我可以立即检索Vertex id?

似乎ComboBox只接受字符串作为模型.我无法创建标签到id对的字典,因为有重复的标签.

我注意到一个ComboCtrl类,我可以创建一个专门的组合框子类,但我觉得有一个更简单的解决方案.

python combobox wxpython

2
推荐指数
1
解决办法
1831
查看次数

Python:在B类中调用A类的方法A?

有许多类似的问题,但没有一个答案出现在现场 - 所以请耐心等待.

我正在努力学习使用Python的OOP,但我一直遇到错误(比如这个),这让我觉得这一切都没有意义,只是使用方法会更容易.

这是我的代码:

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()
Run Code Online (Sandbox Code Playgroud)

所以我遇到的问题是GUI类需要使用WebParser类中的函数,而WebParser类需要从GUI类中存在的文本框中获取文本.

我知道我可以通过将对象作为参数传递来做到这一点,但这似乎完全没有意义,必须有一种更合乎逻辑的方法来做到这一点,不使用类似乎毫无意义?

提前致谢!

python oop wxpython class

2
推荐指数
1
解决办法
1929
查看次数

在wxpython之后阻止换行TextCtrl.WriteText()

我的应用程序有一个类似shell的控制台,在每个命令后都会提示">>>".问题是每次我有我的shell WriteText(">>>")时,它还会附加一个新行.用户可以退格到正确的行,但这看起来很糟糕.有什么办法解决吗?

python wxwidgets wxpython textctrl

2
推荐指数
1
解决办法
1674
查看次数

当a和b都为True时,为什么我的<a>和<b>如果有条件不能执行?

编辑:这是我的错字.出于某种原因,我无法在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条件不执行.是什么赋予了?

python wxwidgets wxpython if-statement

2
推荐指数
1
解决办法
73
查看次数

正则表达式之间的所有东西,Python

为什么这个正则表达式不起作用?

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 regex wxwidgets wxpython

2
推荐指数
1
解决办法
125
查看次数

WxPython - 用按钮打开一个新窗口

我正在创建一个界面,我需要点击一个按钮打开一个新窗口.所以我创建了主窗口,并创建了所有按钮,并在类下创建了新窗口.我不完全确定是否需要,但我也会包含这些信息.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)

python user-interface wxpython

2
推荐指数
1
解决办法
1万
查看次数