wxpython SetStatusText на StatusBar не работает - PullRequest
0 голосов
/ 10 июня 2018

Я тренируюсь на wxpython, делая окно со строкой меню и строкой состояния.Я нахожусь на Mac OS, так что, возможно, он работает по-другому, потому что я не знаю, в чем проблема с моим кодом, но я не нашел ничего в Интернете.

Вот мой код:

#!/usr/bin/python
# coding: utf-8

import wx

class Menus(wx.Frame):
    def __init__(self, ptitle):
        wx.Frame.__init__(self, None, 1, title = ptitle, size = (500, 300))

        menuFile = wx.Menu()
        menuFile.Append(wx.ID_OPEN, "&Open\tCTRL+o")
        menuFile.Append(wx.ID_CLOSE, "&Close\tCTRL+c")
        menuFile.AppendSeparator()
        menuFile.Append(wx.ID_EXIT, "&Quit\tCTRL+q")

        menuBar = wx.MenuBar()
        menuBar.Append(menuFile, "&File")

        self.SetMenuBar(menuBar)

        self.bar = wx.StatusBar(self, 1)
        self.bar.SetFieldsCount(2)
        self.bar.SetStatusWidths([1,1])
        self.SetStatusBar(self.bar)

        self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
        self.Bind(wx.EVT_MENU, self.OnOpen, id=wx.ID_OPEN)
        self.Bind(wx.EVT_MENU, self.OnClose, id=wx.ID_CLOSE)

    def OnOpen(self, evt):
        self.bar.SetStatusText("Choice -> open", 1)

    def OnClose(self, evt):
        self.bar.SetStatusText("Choice -> close", 1)

    def OnExit(self, evt):
        self.Destroy()

class App(wx.App):
    def OnInit(self):
        window = Menus("Window with menu")
        window.Show(True)
        self.SetTopWindow(window)
        return True

app = App()
app.MainLoop()

Когда я нажимаю кнопку Открыть или Закрыть, в строке состояния не появляется текст, но есть строка состояния.Если я выберу вместо установки текста статуса что-то напечатать в терминале, он будет работать нормально.Я также попытался написать self.bar.SetStatusText («Текст»), и он тоже не работает.

Было бы замечательно, если бы кто-то знал, в чем проблема с этой строкой состояния.

Спасибо

1 Ответ

0 голосов
/ 10 июня 2018

С self.bar.SetStatusWidths([1,1]) вы устанавливаете ширину в 1 пиксель и 1 пиксель в ширину соответственно.
Вы должны использовать [-1, -1] (равно), [-1, -2] (часть 2, дважды какнапример, часть 1) и т. д.
или используйте фиксированную ширину [150,200], например.

Существует два типа полей: поля фиксированной ширины и поля переменной ширины.Для полей фиксированной ширины вы должны указать их (постоянную) ширину в пикселях.Для полей переменной ширины укажите отрицательное число, которое указывает, как поле должно расширяться: пространство, оставленное для всех полей переменной ширины, делится между ними в соответствии с абсолютным значением этого числа.Поле переменной ширины с шириной -2 получает вдвое больше, чем поле с шириной -1 и т. Д.

Например, чтобы создать одно поле фиксированной ширины шириной 100 в правой частистрока состояния и еще два поля, которые получают 66% и 33% оставшегося пространства соответственно, вы должны использовать массив, содержащий -2, -1 и 100.

Сообщение «Закрыть текущий документ»,Я подозреваю, что это внутреннее, очень похоже на автоматический значок, добавленный в меню.

Наконец, self.bar.SetStatusText("Text") должен читать self.bar.SetStatusText("Text",1), где 1 - это индекс поля строки состояния, которое вы хотитетекст для отображения.

например

self.bar = wx.StatusBar(self, 1)
self.bar.SetFieldsCount(3)
self.bar.SetStatusWidths([200,-1,-2])
self.SetStatusBar(self.bar)
self.bar.SetStatusText("Second position",1)
self.bar.SetStatusText("Third position",2)

enter image description here

...