2016-04-06 3 views
2

У меня есть просто код:WxPython - изменить рамку

import wx 

class Glowne(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent=parent) 
     pos = 55 
     tekst = 'HELLO - position' 
     font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL) 
     wx.StaticText(self, -1, tekst, (300, pos)).SetFont(font) 

     btn = wx.Button(self, -1, "Change pos", (345, 100)) 
     #self.Bind(wx.EVT_BUTTON, Program.zmiana, btn) 

class Program(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY,'Program') 
     panel_one = Glowne(self) 
     self.SetSize((800,600)) 
     self.Centre() 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = Program() 
    frame.Show() 
    app.MainLoop() 

Как я могу modyfy переменных поз после удара кнопки «Изменить позы»? В моей реальной программе у меня есть что-то вроде: имени name1 name2

"BUTTTON" 

Я хотел бы добавить метод wx.TextCtrl между имя2 и кнопками после удара «BUTTON». Мне нужно modyfy кадр (добавить место beetwen name2 и кнопку). Я не знаю, как я могу это достичь.

EDIT. Существует код мне нужно изменить:

def __init__(self, parent): 
    global odstep 
    self.panel = wx.Panel.__init__(self, parent) 
    odstep = 0 
    odstep1 = 0 
    font = wx.Font(13, wx.DEFAULT, wx.NORMAL, wx.NORMAL) 
    for name in config['rewir1']: 
     nazwa_zliczana = config['rewir1'][name] 
     odstep += 22 
     self.name1 = wx.StaticText(self, -1, name, (300, 10 + odstep)) 
     self.name1.SetFont(font) 
     btn_usuwanie = wx.Button(self, -1, u"Usuń", (475, 10 + odstep)) 
     self.Bind(wx.EVT_BUTTON, lambda evt, i: Program.Usuwanie(evt, i), btn_usuwanie) 
    wx.StaticText(self, -1, 'PART I', (365, 0), style=wx.ALIGN_CENTER).SetFont(font) 
    odstep1 = odstep + 50 
    print odstep 
    for name in config['rewir2']: 
     nazwa_zliczana = config['rewir2'][name] 
     odstep1 += 22 
     self.name2 = wx.StaticText(self, -1, name, (300, 50 + odstep1)) 
     self.name2.SetFont(font) 
     btn_usuwanie_2 = wx.Button(self, -1, u"Usuń", (475, 50 + odstep1)) 
     self.Bind(wx.EVT_BUTTON, lambda evt, i: Program.Usuwanie(evt, i), btn_usuwanie_2) 
    print odstep1 
    wx.StaticText(self, -1, 'PART II', (365, 80 + odstep), style=wx.ALIGN_CENTER).SetFont(font) 
    self.btn = wx.Button(self, -1, "Change panel", (345, 500)) 
    self.btn_dodaj_rewir1 = wx.Button(self, -1, "Add name", (345, 42 + odstep)) 
    self.btn_dodaj_rewir2 = wx.Button(self, -1, "Add name", (345, 84 + odstep1)) 
    self.Bind(wx.EVT_BUTTON, self.new_name, self.btn_dodaj_rewir1) 

ответ

1
  • Вы должны сохранить wx.StaticText инстанс. Чтобы изменить его свойство позже.
    • Используйте SetPosition способ изменить положение.
  • Bind EVT_BUTTON Событие обработчику событий (change_pos в следующем коде).

class Glowne(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent=parent) 
     tekst = 'HELLO - position' 
     font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL) 
     self.text = wx.StaticText(self, -1, tekst, (300, 55)) # Save for later use 
     self.text.SetFont(font) 

     btn = wx.Button(self, -1, "Change pos", (345, 100)) 
     btn.Bind(wx.EVT_BUTTON, self.change_pos) 

    def change_pos(self, event): 
     x, y = self.text.Position 
     self.text.SetPosition((x, y + 10)) 
+0

У меня есть еще одна проблема. В моей программе есть цикл for. Мне нужно изменить позиции всех предметов. Когда я использую SetPosition, он принимает только последний элемент из цикла. Есть идеи? – jundymek

+0

@ Luk, Не могли бы вы опубликовать еще один новый вопрос с кодом, который продемонстрирует вашу проблему? – falsetru

+0

Я изменил свой вопрос и добавил код. Должен ли я начинать новую тему? – jundymek