我有一个800x600px的框架。看起来不错(800x600px)。我有一个改变我的面板的功能:
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()
它工作正常,但结果与图像一样。当我最大化窗口(调整大小)时,它看起来不错。它是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()
我在Ustawienia(wxPanel)添加了self.SetSize((800,600))
。我很抱歉丑陋的代码和外语......
答案 0 :(得分:0)
我的猜测是你需要在新面板或顶级sizer上调用Layout
。通常当您销毁窗口小部件或面板并用新窗口替换它们时,它们不会自动调整大小,而不会刷新。调整大小时,会触发导致应用程序刷新屏幕的事件。通过调用Layout
,它应该在不调整帧大小的情况下进行所需的刷新。