Как поместить индикатор прогресса (guage) в область строки состояния и заблокировать размер графического интерфейса - PullRequest
1 голос
/ 27 октября 2011

Я использую wxPython для поиска всех файлов в определенном каталоге.При поиске файлов прогресс (количество файлов) отправляется на индикатор выполнения, просто чтобы получить немного фона.То, что я хочу сделать, это переместить индикатор выполнения вниз в нижнюю часть фрейма, где SetStatusText обычно показывает имя.Но когда поиск начнется, я бы хотел, чтобы имя / текст заменялось индикатором выполнения.В настоящее время, когда я пытаюсь изменить положение индикатора выполнения, он виден только справа над индикатором выполнения.

Во-вторых, я хочу заблокировать графический интерфейс пользователя в его текущем размере, поэтому окно не может бытьизменен.Я посмотрел на несколько примеров, но каждый начинал с определенного размера по умолчанию.Я хочу, чтобы мой графический интерфейс оставался в том размере, который указан в нем, потому что способ отображения кнопок гарантирует это.Вот как выглядит код GUI:

class MyApp(wx.App):
    def OnInit(self):
        frame = MainWindow("ST v2.0.0", (50, 60), (458, 332))
        frame.Show()
        self.SetTopWindow(frame)
        return True



class MainWindow(wx.Frame):
    def __init__(self, pos, size, title):
        wx.Frame.__init__(self, None, -1, pos, size, title)


        panel = wx.Panel(self, wx.ID_ANY)
        panel.SetBackgroundColour('LIGHT GREY')
        toolbar = self.CreateToolBar()
        toolbar.Realize()
        menuFile = wx.Menu()
        menuFile.Append(1, "&About...")
        menuFile.AppendSeparator()
        menuFile.Append(2, "E&xit")
        menuBar = wx.MenuBar()
        menuBar.Append(menuFile, "&File")
        menu2 = wx.Menu()
        menu2.Append(wx.NewId(), "&Copy", "Copy in status bar")
        menu2.AppendSeparator()
        menu2.Append(wx.NewId(), "C&ut", "")
        menu2.AppendSeparator()
        menu2.Append(wx.NewId(), "Paste", "")
        menu2.AppendSeparator()
        menu2.Append(wx.NewId(), "&Options...", "Display Options")
        menuBar.Append(menu2, "&Edit")

        self.SetMenuBar(menuBar)
        self.CreateStatusBar()
        self.SetStatusText("Welcome to sQAST!")#can put connected here when logged in
        self.Bind(wx.EVT_MENU, self.OnAbout, id=1)
        self.Bind(wx.EVT_MENU, self.OnQuit, id=2)

        x = 100

        #Progress Gauge
        self.gauge = wx.Gauge(panel, -1, x ,pos=(180, 0), size=(-1, 20))



        #Close button
        self.button = wx.Button(panel, label="EXIT", pos=(229, 160), size=(229, 80))
        self.Bind(wx.EVT_BUTTON, self.OnQuit, self.button)
        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
        #Dispenser button
        self.button2 = wx.Button(panel, label="Serv 1", pos=(0, 160), size=(229, 80))
        self.Bind(wx.EVT_BUTTON, self.OnStartButton, self.button2)
        #Site Server
        self.button3 = wx.Button(panel, label="SERV 2", pos=(0, 80), size=(229, 80))
        self.Bind(wx.EVT_BUTTON, self.OnSiteservButton, self.button3)
        #Local Search
        self.button4 = wx.Button(panel, label="ABORT", pos=(229, 80), size=(229, 80))
        self.Bind(wx.EVT_BUTTON, self.OnAbortButton, self.button4)
        self.button4.Disable()
        self.shouldAbort = False 

Это сработало для меня:

count = 0
    count2 = 0
    for afile in filelist:
        (head, filename) = os.path.split(afile)
        if afile.endswith(".log") or afile.endswith(".txt"):
            count2 += 1
            self.progress_bar.Show()
            wx.CallAfter(self.progress_bar.SetValue, count2)# This works ....

            f=ftp.open(afile, 'r')
            for i, line in enumerate(f.readlines()):
                result = regex.search(line)
                if self.shouldAbort:
                    return self.shouldAbort
                    break

1 Ответ

4 голосов
/ 27 октября 2011

Есть несколько способов сделать это.Я думаю, что самое простое - просто использовать виджет EnhancedStatusBar: http://wiki.wxpython.org/EnhancedStatusBar

Однако этот поток также упоминает способ сделать это с обычным StatusBar: http://wxpython -users.1045709.n5.nabble.com/Add-a-progressbar-in-a-statusbar-td2365269.html

Что касается «фиксированного» размера кадра, попробуйте установить его SetSizeHints на нужный размер.

...