wxPython mullline文本框太大而无法wx.框架我能自动“收缩”到文本框的正确大小吗?

2024-07-02 10:25:34 发布

您现在位置:Python中文网/ 问答频道 /正文

不确定我是否正确地询问了这个问题(例如,在正确的上下文中使用widget/object)。这段代码只是一个实验(现在就学习类和wxPython)——所以它作为函数代码可能没有意义。在

问题:我有一个允许用户指定宽度/高度的窗口/框架,并且有一个嵌套在窗口/框架内的多行文本框。最初,我将多行文本框的尺寸设置为与父框架相同的大小,但是滚动条被隐藏了,因为文本框的滚动条大于框架/文本框的大小。所以。。。我决定手动调整文本框的大小,以确保文本框的大小占到滚动条的大小(参见下面的代码,特别是“sizexTxt=sizex-17”和“sizeyTxt=sizey-44”)。在

问:除了手动逐像素调整文本框之外,是否有其他方法可以调整文本框?有没有什么建议可以被认为是Python?在

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()

Tags: 代码self框架title手动framewx文本框
2条回答

杰克给你指出了一个正确的方向,但还有一件事。您应该知道进入框架的第一个对象被包装到基本的sizer中。问题是,据我所知,你无法控制这个尺寸。所以你必须增加你自己的尺寸,你可以用它来做框架装配。您需要控制sizer,因为您希望框架根据sizer更改其大小。在

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()

您需要使用一个或多个sizer,然后指定wx.展开当添加时,使其水平适合尺寸wx.全部垂直安装。在

请在此处查看sizer文档:http://wiki.wxpython.org/Getting%20Started#Sizers

实际上,你可能想阅读整个Windows工作部分,非常有用。在

相关问题 更多 >