Как я могу изменить ширину 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()


Также нет выгода. Почему мой код не работает, и как я могу заставить его работать?





Установка размера в конструкторе работает, поэтому сайзер не имеет отношения к проблеме.

468   2  

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

    Ничего не найдено.