2016-04-17 13 views
0

私はフレーム800x600pxを持っています。それはok(800x600px)に見えます。それは私のコードの下でwxPython - サイズ変更まで表示されるコンテンツのないフレーム

def change(self, evt): 
    self.Destroy() 
    Ustawienia(frame) 
    frame.Show() 
    frame.Centre() 

if __name__ == "__main__": 
app = wx.App(False) 
frame = wx.Frame(None, wx.ID_ANY, size=(800, 600)) 
Glowne(frame) 
frame.Show() 
app.MainLoop() 

それはOKに動作しますが、結果は画像上のようである私は私のパネルを変更する機能を持っています。私がウィンドウを最大化すると(サイズを変更しても)大丈夫です。 800x600ですが、ウィンドウのサイズを変更するまでは内容テキストは表示されません。私のコードのどこにエラーがありますか?

この動作しているコード:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import wx, xlrd, os, sys, json 
reload(sys) 
sys.setdefaultencoding('utf-8') 
with open('config1.json', 'r') as f: 
    config = json.load(f) 

class Glowne(wx.Panel): 

def __init__(self, *args, **kwargs): 
    global workbook, sheet, col, col1, vsizer1, b, hsizer2, vsizer2, vsizer3 
    wx.Panel.__init__(self, *args, **kwargs) 
    with open('config1.json', 'r') as f: 
     config = json.load(f) 

    workbook = xlrd.open_workbook(os.path.join(os.pardir, config['plik']['rejestr'])) 
    sheet = workbook.sheet_by_index(1) 
    sheet1 = workbook.sheet_by_index(0) 

    col = sheet.col(8) # 1st row 
    col1 = sheet1.col(8) 

    linia = wx.StaticLine(self, size=(600,1)) 

    vsizer1 = wx.BoxSizer(wx.VERTICAL) # wszystkie + plik rejestru 
    hsizer1 = wx.BoxSizer(wx.HORIZONTAL) # buttony 
    hsizer2 = wx.BoxSizer(wx.HORIZONTAL) # nazwy rewirów 


    vsizer2 = wx.BoxSizer(wx.VERTICAL) # zliczone sprawy rewir1 
    vsizer3 = wx.BoxSizer(wx.VERTICAL) # zliczone sprawy rewir2 
    hsizer3 = wx.BoxSizer(wx.HORIZONTAL) # sprawy obok siebie rewirami 

    plik = 'Aktualnie wybrany plik to: ' + config['plik']['rejestr'] 

    font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL) 
    rej = wx.StaticText(self, 1, plik, style=wx.ALIGN_CENTER) 
    rej.SetFont(font) 

    #self.btn2 = wx.Button(self, -1, "Zlicz sprawy", (300, 50)) 
    self.btn1 = wx.Button(self, -1, u"Zmień plik rejestru") 
    self.btn = wx.Button(self, -1, u"Ustawienia (dodawanie/usuwanie pracowników)") 

    b = 2 
    vsizer1.Add(rej, 0, wx.ALIGN_CENTER | wx.ALL, b) 

    #hsizer1.Add(self.btn2, 1, wx.ALL, b) 
    hsizer1.Add(self.btn, 1, wx.ALL, b) 
    hsizer1.Add(self.btn1, 1, wx.ALL, b) 

    hsizer3.Add(vsizer2, 2, wx.ALL, b) 
    hsizer3.AddSpacer((140,0)) 
    hsizer3.Add(vsizer3, 2, wx.ALL, b) 

    z = wx.StaticText(self, 1, u'DZIAŁ I') 
    z.SetFont(font) 
    hsizer2.Add(z, 1,wx.ALL, b) 
    z1 = wx.StaticText(self, 1, u'DZIAŁ II') 
    hsizer2.AddSpacer((180,0)) 
    z1.SetFont(font) 
    hsizer2.Add(z1, 1,wx.ALL, b) 

    vsizer1.Add(hsizer1, 1,wx.ALIGN_CENTER | wx.ALL, b) 
    vsizer1.Add(hsizer2, 0,wx.ALIGN_CENTER | wx.ALL, b) 
    vsizer1.Add(linia, 0, wx.ALIGN_CENTER | wx.ALL, 10) 
    vsizer1.Add(hsizer3, 5,wx.ALIGN_CENTER | wx.ALL, b) 

    self.SetSizer(vsizer1) 
    #self.Bind(wx.EVT_BUTTON, self.wyswietlanie_cale, self.btn2) 
    self.wyswietlanie() 
    self.Bind(wx.EVT_BUTTON, self.change, self.btn) 

def change(self, evt): 
    self.Destroy() 
    frame.SetTitle('Ustawienia programu') 
    Ustawienia(frame) 


def wyswietlanie(self): 
    '''Funkcja, która zlicza i wyświetla ilość spraw pracowników''' 
    #self.btn2.Disable() 
    with open('config1.json', 'r') as f: 
     config = json.load(f) 
    policzone_1 = [] 
    policzone_2 = [] 
    z = 0 
    for nazw in config['dzial1']: 
     print nazw 
     print config['dzial1'][nazw] 
     x = config['dzial1'][nazw] #nazwisko z pliku excela 
     print x 
     nazwisko = 0 
     for index, cell_obj in enumerate(col1): 
      if cell_obj.value == x: 
       nazwisko += 1 
     policzone_1.append((nazw, nazwisko)) 

    for nazw in config['dzial2']: 
     print nazw 
     print config['dzial2'][nazw] 
     x = config['dzial2'][nazw] #nazwisko z pliku excela 
     print x 
     nazwisko = 0 
     for index, cell_obj in enumerate(col): 
      if cell_obj.value == x: 
       nazwisko += 1 
     policzone_2.append((nazw, nazwisko)) 

    posortowane1 = sorted(policzone_1,key=lambda x:x[1], reverse=True) 
    posortowane2 = sorted(policzone_2,key=lambda x:x[1], reverse=True) 
    for i in posortowane1: 
     print i 
     z += 20 
     wynik = '%s: %s' % (i[0], i[1]) 
     sprawy = wx.StaticText(self, -1, wynik) 
     vsizer2.Add(sprawy, 1,wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, b) 


    for i in posortowane2: 
     print i 
     z += 20 
     wynik = '%s: %s' % (i[0], i[1]) 
     sprawy = wx.StaticText(self, -1, wynik) 
     vsizer3.Add(sprawy, 1,wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, b) 


class Ustawienia(wx.Panel): 
    with open('config1.json', 'r') as f: 
     config = json.load(f) 
def __init__(self, *args, **kwargs): 
    global odstep, odstep1 
    wx.Panel.__init__(self, *args, **kwargs) 
    self.SetSize((800,600)) 
    odstep = 0 
    odstep1 = 0 
    font = wx.Font(13, wx.DEFAULT, wx.NORMAL, wx.NORMAL) 
    for nazwisko in config['dzial1']: 
     odstep += 22 
     self.nazwisko1 = wx.StaticText(self, -1, nazwisko, (100, 10 + odstep)) 
     self.nazwisko1.SetFont(font) 
     btn_usuwanie = wx.Button(self, -1, u"Usuń", (275, 10 + odstep)) 
     self.Bind(wx.EVT_BUTTON, lambda evt, i: Program.Usuwanie(evt, i), btn_usuwanie) 
    wx.StaticText(self, -1, 'DZIAL I', (110, 0), style=wx.ALIGN_CENTER).SetFont(font) 
    print odstep 
    for nazwisko in config['dzial2']: 
     odstep1 += 22 
     self.nazwisko2 = wx.StaticText(self, -1, nazwisko, (460, 10 + odstep1)) 
     self.nazwisko2.SetFont(font) 
     self.btn_usuwanie_2 = wx.Button(self, -1, u"Usuń", (650, 10 + odstep1)) 
     self.btn_usuwanie_2.Bind(wx.EVT_BUTTON, lambda nazwisko=self.nazwisko2: self.usuwanie(nazwisko)) 
    print odstep1 
    wx.StaticText(self, -1, 'DZIAL II', (480, 0), style=wx.ALIGN_CENTER).SetFont(font) 
    self.btn = wx.Button(self, -1, "Change panel", (345, 500)) 
    self.btn_dodaj_dzial1 = wx.Button(self, -1, "Add name", (100, 42 + odstep)) 
    self.btn_dodaj_dzial2 = wx.Button(self, -1, "Add name", (480, 42 + odstep1)) 
    self.Bind(wx.EVT_BUTTON, lambda rewir: self.nowy_pracownik(self, 'dzial1'), self.btn_dodaj_dzial1) 
    self.Bind(wx.EVT_BUTTON, lambda rewir: self.nowy_pracownik(self, 'dzial2'), self.btn_dodaj_dzial2) 


def nowy_pracownik(self, item, rewir): 
    nowy_pracownik = [] 
    prawda = True 
    with open('config1.json', 'r') as f: 
     config = json.load(f) 
    while prawda: 
     dlg = wx.TextEntryDialog(self, u'Wpisz imię i nazwisko', defaultValue='') 
     if dlg.ShowModal() == wx.ID_OK: 
      result = dlg.GetValue() 
      if len(result) > 0: 
       prawda = False 
      else: 
       wx.MessageBox(u'Wpisz coś!!!', 'Info', wx.OK | wx.ICON_INFORMATION) 
      nowy_pracownik.append(result) 
     else: 
      prawda = False 
      dlg.Destroy() 
    prawda1 = True 
    while prawda1: 
     dlg1 = wx.TextEntryDialog(self, u'Wpisz nazwę do wyszukiwania', defaultValue='') 
     if dlg1.ShowModal() == wx.ID_OK: 
      result = dlg.GetValue() 
      if len(result) > 0: 
       prawda1 = False 
      else: 
       wx.MessageBox(u'Wpisz coś!!!', 'Info', wx.OK | wx.ICON_INFORMATION) 
      nowy_pracownik.append(result) 
     else: 
      prawda = False 
      prawda1 = False 
      dlg1.Destroy() 
    config[rewir][str(nowy_pracownik[0])] = str(nowy_pracownik[1]) 
    with open('config1.json', 'w') as f: 
     json.dump(config, f, sort_keys=True, indent=2, ensure_ascii=False) 
    self.change1(self) 

def change1(self,evt): 
    global config 
    with open('config1.json', 'r') as f: 
     config = json.load(f) 
    self.Destroy() 
    Ustawienia(frame) 


if __name__ == "__main__": 
    app = wx.App(False) 
    frame = wx.Frame(None, wx.ID_ANY, size=(800, 600)) 
    Glowne(frame) 
    frame.Show() 
    app.MainLoop() 

IはUstawienia(wxPanel)でself.SetSize((800,600))を添加しました。私は私の推測では、新しいパネルまたはトップレベルサイザーにLayoutを呼び出す必要があるということです...

My new Panel - without visible content

+0

小さな実行可能な例を提供できますか?また、どのバージョンのwxPythonとどのOSを実行していますか? –

+0

作業コードを追加しました。私は3.0.2.0 wxPythonとWin10を使用します。 – jundymek

答えて

0

醜いコードと外国語のため申し訳ありません。通常、ウィジェットやパネルを破棄して新しいウィジェットやパネルに置き換えると、ウィジェットやパネルは自動的にサイズ変更されず、リフレッシュされません。サイズを変更すると、アプリケーションが画面を更新するイベントが発生します。 Layoutを呼び出すと、フレームのサイズを変更せずに必要なリフレッシュが実行されます。

関連する問題