不确定我是否正确地问这个问题(例如在正确的上下文中使用widget / object)。这段代码只是作为一个实验(现在学习类和wxPython) - 所以它可能没有意义作为功能代码。
问题:我有一个窗口/框架,我允许用户指定宽度/高度,并且有一个嵌套在窗口/框架内的多行文本框。最初,我将多行文本框的尺寸设置为与父框架相同的尺寸,但滚动条被隐藏,因为文本框的滚动条大于框架/文本框的大小。所以...我决定只手动调整文本框的大小,以确保文本框的大小占滚动条(请参阅下面的代码,特别是“sizexTxt = sizex - 17”和“sizeyTxt = sizey” - 44" )。
问题:除了手动逐像素调整外,还有某种调整文本框的方法吗?是否有人可以提供被认为是pythonic的建议?
import wx
class myFrame(wx.Frame):
def __init__(self, parent, title, sizexy, sizexyTxt):
wx.Frame.__init__(self, parent, title=title, size=sizexy)
self.Show(True)
wx.TextCtrl(self, style=wx.TE_MULTILINE, size=(sizexyTxt))
pass
sizex = input("X= ")
sizey = input("Y= ")
sizexy=(sizex, sizey)
sizexTxt = sizex - 17
sizeyTxt = sizey - 44
sizexyTxt = (sizexTxt, sizeyTxt)
myApp = wx.App(False)
frameNow = myFrame(None,"This is my title", sizexy, sizexyTxt)
myApp.MainLoop()
答案 0 :(得分:2)
import wx
class myFrame(wx.Frame):
def __init__(self, size, *arg, **kwarg):
wx.Frame.__init__(self, *arg, **kwarg)
self.text = wx.TextCtrl(self, style=wx.TE_MULTILINE, size=size)
self.sizer = wx.BoxSizer()
self.sizer.Add(self.text, proportion=1, flag=wx.EXPAND)
self.SetSizerAndFit(self.sizer)
self.Show()
myApp = wx.App(False)
size = []
for a in ["X", "Y"]:
d = wx.NumberEntryDialog(None, "Text size", "%s: " % a, "Window size entry", 100, 50, 200)
if d.ShowModal() == wx.ID_OK:
size.append(d.GetValue())
frameNow = myFrame(size, None)
myApp.MainLoop()
答案 1 :(得分:1)
您需要使用sizer(或sizer),然后在添加时指定wx.EXPAND以使其适合水平的sizer并使wx.ALL垂直适合。
在此处查看sizer文档:http://wiki.wxpython.org/Getting%20Started#Sizers
实际上,您可能希望阅读整个“使用Windows”部分,非常有用。