Почему текст, который я установил в wxPython TextCtrl, сдвинулся влево и выделен?

Работа над пользовательским интерфейсом и некоторые текстовые вводы предварительно заполнены информацией по умолчанию. Как видно из приведенного ниже снимка экрана, предустановленный текст выделен и скрыт за левым краем TextCtrl. Как я могу это исправить?

Крышка экрана:

Текст выделяется, когда оконная рамка находится в фокусе на Windows. Это было не тогда, когда я обрезал это. Полный текст: "/var/lib/cmt/tomcat/CDES"

Образ

(Извините за размер изображения, я не знаю, как изменить его размер в почтовом интерфейсе SOF)

Непосредственно соответствующий код:

    DirPath_O_Text = wx.StaticText(panel,label='Remote Directory Path', style=wx.ALIGN_RIGHT)
    self.DirPath_O_TC = wx.TextCtrl(panel)
    self.DirPath_O_TC.ChangeValue("/var/lib/cmt/tomcat/CDES")

    hbox1.Add(DirPath_O_Text, proportion=1,flag=wx.EXPAND|wx.BOTTOM,border=10)
    hbox1.Add((25,-1))
    hbox1.Add(self.DirPath_O_TC, proportion=1,)
    hbox1.Add((25,-1))

Полный код:

import wx

class Popup(wx.Frame):

    def __init__(self, *args, **kwargs): #initializing
        super(Popup, self).__init__(*args, **kwargs)

        self.SetMinSize((500,400)) #change this to change the minimum size of the total frame
        self.Centre()
        self.InitUI()
        self.Show() 


    def InitUI(self): #building the UI

        panel = wx.Panel(self) #main panel that holds everything

        #setting font
        font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
        font.SetPointSize(16) #this is the size for the title, its smaller later on

        #setting panel colour
        # background_Colour = '#BCD7E0'
        # panel.SetBackgroundColour(background_Colour)

        ###########################     
        #vbox = sizer holds the whole thing
        #  Title = label
        #  hbox1 = sizer
        #     Remote Directory Label
        #     Remote Directory TextCtrl
        #  hbox2 = sizer
        #     Local Directory Label
        #     Local Directory TextCtrl
        #  hbox3 = sizer
        #     Hostname Label
        #     Hostname TextCtrl
        #  hbox4 = sizer
        #     Username Label
        #     Username TextCtrl
        #  hbox5 = sizer
        #     Password Label
        #     Password TextCtrl
        #  vbox2 = just used to align the hbox6 to center
        #     hbox6 = sizer that holds the bottom two buttons
        #        ok button = sends all info to next program
        #        Cancel button = closes current program

        ###############
        #start
        vbox = wx.BoxSizer(wx.VERTICAL) #oriented verticaly

        #########
        #title      
        st_title = wx.StaticText(panel,label='CMT-CDES XML Messaging Tool', style=wx.ALIGN_CENTRE)
        st_title.SetFont(font)
        font.SetPointSize(9) #changes font back to small for all other text besides title

        vbox.Add(st_title, proportion=1,flag=wx.EXPAND|wx.ALL, border=10) #adds the title
        ######

        ########
        #6 sizers. 1-5 are for the inputs, 6 is for buttons on bottom
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        hbox4 = wx.BoxSizer(wx.HORIZONTAL)
        hbox5 = wx.BoxSizer(wx.HORIZONTAL)
        hbox6 = wx.BoxSizer(wx.HORIZONTAL)
        ########


        ########
        #set labels and TC for each hbox

        #hbox1
        DirPath_O_Text = wx.StaticText(panel,label='Remote Directory Path', style=wx.ALIGN_RIGHT)
        self.DirPath_O_TC = wx.TextCtrl(panel)
        self.DirPath_O_TC.ChangeValue("/var/lib/cmt/tomcat/CDES")

        hbox1.Add(DirPath_O_Text, proportion=1,flag=wx.EXPAND|wx.BOTTOM,border=10)
        hbox1.Add((25,-1))
        hbox1.Add(self.DirPath_O_TC, proportion=1,)
        hbox1.Add((25,-1))

        #hbox2
        DirPath_L_Text = wx.StaticText(panel,label='Local Directory Path', style=wx.ALIGN_RIGHT)
        self.DirPath_L_TC = wx.TextCtrl(panel)

        hbox2.Add(DirPath_L_Text, proportion=1,flag=wx.EXPAND|wx.BOTTOM,border=10)
        hbox2.Add((25,-1))
        hbox2.Add(self.DirPath_L_TC, proportion=1, )
        hbox2.Add((25,-1))

        #hbox3
        Host_Text = wx.StaticText(panel,label='Hostname\IP', style=wx.ALIGN_RIGHT)
        self.Host_TC = wx.TextCtrl(panel)

        hbox3.Add(Host_Text, proportion=1,flag=wx.EXPAND|wx.BOTTOM,border=10)
        hbox3.Add((25,-1))
        hbox3.Add(self.Host_TC, proportion=1)
        hbox3.Add((25,-1))

        #hbox4
        User_Text = wx.StaticText(panel,label='Username', style=wx.ALIGN_RIGHT)
        self.User_TC = wx.TextCtrl(panel)

        hbox4.Add(User_Text, proportion=1,flag=wx.EXPAND|wx.BOTTOM,border=10)
        hbox4.Add((25,-1))
        hbox4.Add(self.User_TC, proportion=1)
        hbox4.Add((25,-1))

        #hbox5
        Pass_Text = wx.StaticText(panel,label='Password', style=wx.ALIGN_RIGHT)
        self.Pass_TC = wx.TextCtrl(panel, style=wx.TE_PASSWORD)

        hbox5.Add(Pass_Text, proportion=1,flag=wx.EXPAND|wx.BOTTOM,border=10)
        hbox5.Add((25,-1))
        hbox5.Add(self.Pass_TC, proportion=1)
        hbox5.Add((25,-1))
        ########

        ########
        #buttons
        btn_size = (90, 30)
        btn_OK = wx.Button(panel, label='OK', size=btn_size)
        btn_Cancel = wx.Button(panel, label='Cancel', size=btn_size)

        #bindings
        btn_OK.Bind(wx.EVT_BUTTON, self.OK) #binds to ok (just takes variables from all text boxes, and passes to program)
        btn_Cancel.Bind(wx.EVT_BUTTON, self.Cancel) #binds to cancel (just closes the window)

        #holds buttons
        hbox6.Add(btn_OK)
        hbox6.Add((25,-1)) #spacer between buttons
        hbox6.Add(btn_Cancel, flag=wx.ALIGN_RIGHT,proportion=0)

        #aligns hbox
        vbox2 = wx.BoxSizer(wx.VERTICAL) #added this vbox to set the alignment to center
        vbox2.Add(hbox6, flag=wx.ALIGN_CENTRE, proportion = 0)
        #######

        ############
        #add everything to main vbox
        vbox.Add(hbox1,proportion=1,flag=wx.BOTTOM|wx.EXPAND, border=10)
        vbox.Add(hbox2,proportion=1,flag=wx.BOTTOM|wx.EXPAND, border=10)
        vbox.Add(hbox3,proportion=1,flag=wx.BOTTOM|wx.EXPAND, border=10)
        vbox.Add(hbox4,proportion=1,flag=wx.BOTTOM|wx.EXPAND, border=10)
        vbox.Add(hbox5,proportion=1,flag=wx.BOTTOM|wx.EXPAND, border=10)

        #buttons vbox
        vbox.Add(vbox2,proportion=1,flag=wx.BOTTOM|wx.EXPAND, border=10)
        ############

        #add main vbox to panel
        panel.SetSizer(vbox)

    def OK(self, e):
        #creates a 5 item list, [DirPath_O, DirPath_L, Host, User, Pass]
        args = [str(self.DirPath_O_TC.GetValue()) , str(self.DirPath_L_TC.GetValue()),str(self.Host_TC.GetValue()), str(self.User_TC.GetValue()), str(self.Pass_TC.GetValue())]

        #print "args[1:5]: ", args

        '''TODO
        '''
        #call main, pass it args
        #self.Close() #closes window when done
        '''
        '''

        #TODO: Test if values are correct

        print #not needed, just extra

    def Cancel(self, e): #closes window
        self.Close()



#this is the main loop
ex = wx.App()
Popup(None)
ex.MainLoop()

1 ответ

Я считаю, что текст по умолчанию выровнен по левому краю. Если вы хотите, чтобы он был выровнен по правому краю, я думаю, вы можете использовать SetWindowStyle метод наряду с wx.TE_RIGHT флаг, чтобы сделать это.

Что касается того, почему первый текстовый элемент управления выделяет текст, причина в том, что первый текстовый элемент управления также является первым виджетом, который может принимать фокус. Поскольку он получает фокус и содержит текст, текст выделяется автоматически.

Другие вопросы по тегам