Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何抛光/完善wxPython TextCtrls的定位和外观?_Python_Wxpython_Wxwidgets - Fatal编程技术网

如何抛光/完善wxPython TextCtrls的定位和外观?

如何抛光/完善wxPython TextCtrls的定位和外观?,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,我和wxPython有一些纯粹的表面问题。例如,标签和它们所代表的控件之间的关系——所有东西都看起来至少偏离目标2-3像素,有时甚至更糟。在我当前创建的对话框中,我将文本控件的字体更改为Consolas,并将它们放在带有wx.EXPAND的大小器中。首先,一旦我更改了字体,文本控件中的文本就向上倾斜了几个像素,可能是因为字体比我设置的小一两个像素,而当我设置wx.EXPAND时,文本控件的高度增加了几个像素,使得倾斜更严重。以下是expand标志前后的一些屏幕截图: 作为强迫症的完美主义者,

我和wxPython有一些纯粹的表面问题。例如,标签和它们所代表的控件之间的关系——所有东西都看起来至少偏离目标2-3像素,有时甚至更糟。在我当前创建的对话框中,我将文本控件的字体更改为Consolas,并将它们放在带有
wx.EXPAND
的大小器中。首先,一旦我更改了字体,文本控件中的文本就向上倾斜了几个像素,可能是因为字体比我设置的小一两个像素,而当我设置
wx.EXPAND时,文本控件的高度增加了几个像素,使得倾斜更严重。以下是expand标志前后的一些屏幕截图:

作为强迫症的完美主义者,这对我来说是一个相当大的问题。我找不到任何方法通过Google、Wiki或API来影响文本控件中文本的位置

假设我想将文本控件的高度降低两个像素,并将其文本内容向下移动两个像素-执行这种挑剔的调整的最有效方式是什么



创建文本控件时,不需要接受默认高度。你可以坚持身高是你想要的。如果您将其他尺寸保留为默认值(-1),则尺寸测量器将为您处理这些事情,但尊重您关于高度的决定

tc = wx.TextCtrl(parent, -1, "", 
     wxPoint(-1,-1), wxSize(-1,my_preferred_height_in_pixels))

[我对python不太了解-您应该能够将其转换为优秀的python]

您应该不考虑文本控件的高度(即既不要硬编码也不要使用
wxEXPAND
),只需使用
wxALIGN_VERTICAL
(正如您已经做的那样,但它会被
wxEXPAND
覆盖)以正确对齐控件


如果希望文本控件仅在水平方向上展开,则应以标准方式将其放入
wxBoxSizer

wx中。在网格中展开
大小调整器可在两个方向上展开。您将需要嵌套的框大小调整器来覆盖此行为

import wx

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)

        self.label = wx.StaticText(self.panel, label="Label")
        self.text = wx.TextCtrl(self.panel)
        self.button = wx.Button(self.panel, label="+", size=(50, 50))


        self.sizer = wx.GridBagSizer(5, 5)
        self.nested = wx.BoxSizer()
        self.sizer.Add(self.label, (0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
        self.sizer.Add(self.nested, (0, 1), flag=wx.EXPAND)
        self.nested.Add(self.text, proportion=1, flag=wx.ALIGN_CENTER)
        self.sizer.Add(self.button, (0, 2))
        self.sizer.AddGrowableCol(1)

        self.panel.SetSizerAndFit(self.sizer)  
        self.Show()


app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

更多信息见

我希望文本控件保持默认高度。如何计算默认高度和硬编码?默认高度是指控件创建和放置后未展开时的高度。在不展开的情况下运行程序,计算像素数,然后将该数字编码。不幸的是,这不起作用。我将高度硬编码为23px(
tc=wx.TextCtrl(父项,-1,大小=(-1,23))
),但高度仍然由大小调整器自动增加。只是为了确保我也尝试将高度设置为5和10-两者都没有任何区别。-1表示硬编码大小。只有当sizer使您的小部件变小(它不会低于您喜欢的大小),而不是变大时,这也会起作用。