Как я могу изменить ширину TextCtrl в wxPython, в?
Я пытаюсь создать текстовый элемент управления, который имеет высоту по умолчанию, но пользовательскую ширину. Вот мой текущий код:
tc = wx.TextCtrl(self, -1)
tc.Size.SetWidth(300)
Однако ширина текстового элемента управления остается неизменной. Я также попытался вызвать
tc.Layout() после изменения ширины без каких-либо результатов. Я не хочу вводить пользовательский размер в конструктор класса, так как я хочу, чтобы он использовал высоту по умолчанию. Я также попытался быть более подробным, если tc.GetSize возвращает глубокую копию объекта Size: tc = wx.TextCtrl(self, -1, size=(300, 23))
tc_size = tc.Size
tc_size.SetWidth(300)
tc.Size = tc_size
tc.Layout()
Также нет выгода. Почему мой код не работает, и как я могу заставить его работать?
Установка размера в конструкторе работает, поэтому сайзер не имеет отношения к проблеме.
2 ответов:
Я только что заметил, что могу передать
(300, -1)как размер элемента управления текстом:wx.TextCtrl(self, -1, size=(300, -1)), что приводит к текстовому элементу управления, использующему высоту по умолчанию. Это решает мою проблему, но технически не отвечает на мой вопрос, поэтому я держусь за лучший ответ.
Edit: этот ответ плюс комментарии ниже отвечают на мой вопрос.
Вы должны позволить сайзерам контролировать размер ваших элементов управления, а не устанавливать их явно.
import wx class Frm(wx.Frame): def __init__(self, *args, **kwargs): super(Frm, self).__init__(*args, **kwargs) txt = wx.TextCtrl(self) s = wx.BoxSizer(wx.HORIZONTAL) s.Add(txt, 1) self.SetSizer(s) self.Layout() app = wx.PySimpleApp() frame = Frm(None) frame.Show() app.MainLoop()Это позволяет элементам управления расположиться относительно друг друга с общим руководством из вашего кода. Так что запуск одного и того же кода на Mac против Windows, например, все равно должен привести к хорошей компоновке.
Я понимаю, что это не дает прямого ответа на ваш вопрос, но хотел подтолкнуть вас к сайзерам, если вы их не знаете. Это отнимает много тяжелой работы от написания и поддержание макета пользовательского интерфейса.
Comments