2013-01-14 33 views
4

我在wxPython中有一些純粹的美化問題。例如,標籤和它們所代表的控件之間的關係 - 所有東西總是看起來至少有2-3個像素,有時甚至更糟。在我正在創建的對話框中,我已將文字控件的字體更改爲Consolas,並將它們放入尺寸爲wx.EXPAND的尺寸中。首先,一旦我改變字體,文本控件中的文本向上傾斜了幾個像素,大概是因爲字體是一個或兩個更小的像素,並且當我設置wx.EXPAND時,文本控件的高度增加了幾個像素,使得偏差甚至更糟。下面是一些截圖前後擴大後旗,分別爲:如何擦亮/完美定位和顯示wxPython TextCtrls?

enter image description here

enter image description here

與OCD一個完美主義者,這是一個相當大的問題,對我來說。我找不到任何方式通過Google,Wiki或API在文本控件中影響文本的位置。

說我想將文本控件的高度減少幾個像素,並將它們的文本內容向下移動幾個像素 - 執行這種挑剔調整的最有效方式是什麼?


Here is the code for the dialog.

回答

0

當您創建文本控件,你不需要接受默認的高度。你可以堅持任何你想要的高度。如果您將其他尺寸保留爲其默認值(-1),則尺寸測量儀將爲您處理這些事情,但要尊重您對高度的決定。

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

[我不知道蟒蛇很好 - 你應該能夠將其轉換成良好的蟒蛇]

+0

我希望文本控件保持默認高度。我怎樣才能找出默認的高度和硬編碼?默認高度是指控件創建並放置之後的高度,而不是展開後的高度。 – Hubro

+0

在沒有展開的情況下運行您的程序,計算像素,然後編碼該數字。 – ravenspoint

+0

不幸的是,這沒有奏效。我將高度硬編碼爲23px('tc = wx.TextCtrl(parent,-1,size =( - 1,23))'),但高度仍然由sizer自動增加。只是爲了確保我也嘗試將高度設置爲5和10--兩者沒有任何區別。 – Hubro

3

你應該獨自離開文本控件的高度(即沒有硬編碼,也沒有使用wxEXPAND)並簡單地使用wxALIGN_VERTICAL(正如您已經這樣做了,但會被wxEXPAND覆蓋)來正確對齊控件。

如果您希望文本控件僅在水平方向上展開,您應該以標準方式將其置於wxBoxSizer之內。

0

wx.EXPAND在grid sizer中向兩個方向擴展。您將需要嵌套的Box sizer來覆蓋此行爲。

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

的更多信息,wxPython mailing list