Как сделать wx.TextEntryDialog больше и изменить его размер - PullRequest
7 голосов
/ 24 августа 2010

Я создаю wx.TextEntryDialog следующим образом:

import wx

dlg = wx.TextEntryDialog(self, 'Rules:', 'Edit rules', 
                         style=wx.TE_MULTILINE|wx.OK|wx.CANCEL)
dlg.SetValue(self.rules_text.Value)
if dlg.ShowModal() == wx.ID_OK:
    …

В результате появляется диалоговое окно, которое слишком мало для моих нужд и не может быть изменено в размере:

small dialog box

У меня вопрос: Как сделать диалоговое окно больше и изменить его размер? Я попытался добавить флаги wx.DEFAULT_DIALOG_STYLE и wx.RESIZE_BORDER, но это не имело никакого эффекта, кроме замены текста точками:

dlg = wx.TextEntryDialog(self, 'Rules:', 'Edit rules', 
                         style=wx.TE_MULTILINE|wx.OK|wx.CANCEL|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)

small, garbled dialog box

1 Ответ

10 голосов
/ 24 августа 2010

Время научиться писать свои собственные диалоги! ; -)

Встроенные диалоговые окна, такие как TextEntryDialog, предназначены только для самых основных программ. Если вам нужно много настроек, вам нужно написать свои собственные диалоги.

Вот пример, это должно работать для вас.

import wx

class TextEntryDialog(wx.Dialog):
    def __init__(self, parent, title, caption):
        style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
        super(TextEntryDialog, self).__init__(parent, -1, title, style=style)
        text = wx.StaticText(self, -1, caption)
        input = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE)
        input.SetInitialSize((400, 300))
        buttons = self.CreateButtonSizer(wx.OK|wx.CANCEL)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(text, 0, wx.ALL, 5)
        sizer.Add(input, 1, wx.EXPAND|wx.ALL, 5)
        sizer.Add(buttons, 0, wx.EXPAND|wx.ALL, 5)
        self.SetSizerAndFit(sizer)
        self.input = input
    def SetValue(self, value):
        self.input.SetValue(value)
    def GetValue(self):
        return self.input.GetValue()

if __name__ == '__main__':
    app = wx.PySimpleApp()
    dialog = TextEntryDialog(None, 'Title', 'Caption')
    dialog.Center()
    dialog.SetValue('Value')
    if dialog.ShowModal() == wx.ID_OK:
        print dialog.GetValue()
    dialog.Destroy()
    app.MainLoop()
...