wx Python неправильно рисует элементы пользовательского дерева - PullRequest
0 голосов
/ 12 апреля 2010

В настоящее время я использую wx.CustomTree, чтобы отобразить серию параметров конфигурации. Я обычно заполняю их с помощью wx.TextCtrl / wx.Combobox, чтобы позволить пользователю редактировать / вводить материал. Вот мой код:

class ConfigTree(CT.CustomTreeCtrl):
    """
        Holds all non gui drawing panel stuff
    """
    def __init__(self, parent):
        CT.CustomTreeCtrl.__init__(self, parent,
                                   id = common.ID_CONTROL_SETTINGS,
                                   style = wx.TR_DEFAULT_STYLE | wx.TR_HAS_BUTTONS
                                        | wx.TR_HAS_VARIABLE_ROW_HEIGHT | wx.TR_SINGLE)
        #self.HideWindows()
        #self.RefreshSubtree(self.root)
        self.population_size_ctrl = None
        self.SetSizeHints(350, common.FRAME_SIZE[1])
        self.root = self.AddRoot("Configuration Settings")
        child = self.AppendItem(self.root, "Foo", wnd=wx.TextCtrl(self, wx.ID_ANY, "Lots Of Muffins"))

Проблема в том, что любые дочерние узлы, данные для этих узлов не заполнены. Когда я в основном раскрываю узел дерева настроек конфигурации. Я вижу узел "Foo", однако текстовое поле пустое. Это одинаково для обоих текстовых узлов, пока я фактически не нажму на дочерний узел. Я смотрел пробовал все формы обновления / и т.д. Есть ли у кого-нибудь идеи?


Кому: Анураг Униял

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

Итак, я попробовал код на моем Macbook Pro под Mac OS X с новейшими версиями wx и python 2.6. У меня все еще остается та же проблема, однако я заметил, что изменение размера окна или даже касание полосы прокрутки устраняет проблему.

Я также заметил, что в Windows Vista / Windows 7 проблем абсолютно НЕТ.

Итак, попробуем это на другом macbook, работающем под управлением более старой версии wx + python. Результаты в той же задаче: (

Есть ли способ заставить панель перерисовать ее самостоятельно? Что, я уверен, происходит, когда я изменяю размер окна.

Если у вас нет идей, тогда я разберу их и приведу демонстрационный пример, я дома и не буду на работе до завтрашнего дня.

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Вы можете использовать RefreshItems , если вы используете виртуальные элементы управления , или вы можете обновить панель , который обновит содержимое всех дочерних окон (виджетов).

1 голос
/ 13 апреля 2010

Я тестировал его в окне с версией wx 2.8.10.1, и он работает, какую ОС и версию wx вы используете?

это автономный код, который можно скопировать и запустить

import wx
import wx.lib.customtreectrl as CT

class ConfigTree(CT.CustomTreeCtrl):
    """
        Holds all non gui drawing panel stuff
    """
    def __init__(self, parent):
        CT.CustomTreeCtrl.__init__(self, parent,
                                   id = -1,
                                   style = wx.TR_DEFAULT_STYLE | wx.TR_HAS_BUTTONS
                                        | wx.TR_HAS_VARIABLE_ROW_HEIGHT | wx.TR_SINGLE)
        self.population_size_ctrl = None
        self.SetSizeHints(350, 350)
        self.root = self.AddRoot("Configuration Settings")
        child = self.AppendItem(self.root, "Foo", wnd=wx.TextCtrl(self, wx.ID_ANY, "Lots Of Muffins"))

def main():
    app = wx.App()
    frame = wx.Frame(None, title="Test tree", size=(500,500))
    p = wx.Panel(frame, size=(500,500))
    tree = ConfigTree(p)
    tree.SetSize((500,500))
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...