우선 파이썬에 익숙하지 않으므로 코드에서 엉망이라고 판단 해주십시오 :). 순환 진행 표시 줄을 만들려고했지만 몇 가지 문제가 발생하여 원인을 찾을 수 없습니다. 문제는 입니다. setValue (100)이 모든 원을 채우는 경우 setRange (0, 100) 또는 setMmaximum (100)이 작동하지 않습니다. 그리고 두 번째 문제는 진행률 막대가 거꾸로 달리는 것입니다. 누군가 내가 뭘 잘못했는지 설명해 주실 수 있습니까? 내가 지금까지 무엇을 여기wxPython 커스텀 progressBar 문제
:
main.py 파일
import wx
from src.arc import TestArc
class bandom(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(800, 600))
self.gauge = TestArc(self)
self.gauge.SetFocus()
#self.gauge.setMinimun(0)
#self.gauge.setMaximun(100)
self.gauge.setRange(0, 100)
self.gauge.setValue(10)
# timer for testing progressbar
# self.timer = wx.Timer(self)
# self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
# self.timer.Start(100)
# self.val = 0
# def OnTimer(self, evt):
# self.val += 1
# self.gauge.setValue(self.val)
#
# if self.val >= 100:
# self.val = 0
# #print(self.val)
class MyApp(wx.App):
def OnInit(self):
frame = bandom(None, -1, 'Window title here')
frame.Show(True)
self.SetTopWindow(frame)
return True
def main():
app = MyApp(0)
app.MainLoop()
if __name__ == '__main__':
main()
및 arc.py 파일
class TestArc(wx.Panel):
def __init__(self, *args, **kwargs):
super(TestArc, self).__init__(*args, **kwargs)
self.lineWidth = 0
self.min = 0
self.max = 100
self._value = 0
self.setText = '---'
# self.font = someFont()
self.position = wx.Rect() # self.position.Set(x, y, width, height)
self.startPoint = math.radians(0)
self.endPoint = math.radians(0)
self.Bind(wx.EVT_PAINT, self.OnPaint)
def setRange(self, min, max):
self.min = min
self.max = max
if self.max < self.min:
self.max, self.min = self.min, self.max
if self._value < self.min:
self._value = self.min
elif self._value > self.max:
self._value = self.max
self.Refresh()
def setMinimun(self, min):
self.setRange(min, self.max)
def setMaximun(self, max):
self.setRange(self.min, max)
def setValue(self, val):
if self._value != val:
if val < self.min:
self._value = self.min
elif val > self.max:
self._value = self.max
else:
self._value = val
self.Refresh()
self.Refresh()
def setLineWidth(self, lineWidth):
self.lineWidth = lineWidth
def setPosition(self, x, y, width, height):
self.position = wx.Rect(x, y, width, height)
def OnPaint(self, event=None):
dc = wx.PaintDC(self)
gc = self.MakeGC(dc)
self.Draw(gc)
def MakeGC(self, dc):
try:
if False:
gcr = wx.GraphicsRenderer.GetCairoRenderer
gc = gcr() and gcr().CreateContext(dc)
if gc is None:
wx.MessageBox("Unable to create Cairo Context.", "Oops")
gc = wx.GraphicsContext.Create(dc)
else:
gc = wx.GraphicsContext.Create(dc)
except NotImplementedError:
dc.DrawText("This build of wxPython does not support the wx.GraphicsContext "
"family of classes.",
25, 25)
return None
return gc
def Draw(self, gc):
#middle progressbar line
radStart = math.radians(90)
radEnd = math.radians(0)
path = gc.CreatePath()
path.AddArc(80, 80, 50, radStart, radEnd, True)
pen = wx.Pen('#000000', 4)
pen.SetCap(wx.CAP_BUTT)
gc.SetPen(pen)
gc.SetBrush(wx.Brush('#000000', wx.TRANSPARENT))
gc.DrawPath(path)
#progress bar
start = math.radians(90)
#r = math.radians(270)
arcStep = -270/(self.max - self.min) * self._value
end = math.radians(arcStep)
path = gc.CreatePath()
path.AddArc(80, 80, 50, start, end)
pen = wx.Pen('#CC7F32', 15)
pen.SetCap(wx.CAP_BUTT)
gc.SetPen(pen)
gc.SetBrush(wx.Brush('#000000', wx.TRANSPARENT))
gc.DrawPath(path)
고맙지 만 여전히 거꾸로 돌아갑니다. 어떻게 해결할 수 있습니까? –
나는 당신이 말하는 것을 모른다. 나침반/시계를 사용하여 코드는 남쪽 (6)에서 시작하여 시계 방향으로 서쪽 (9), 북쪽 (12) 및 끝에서 동쪽 (3)으로 이동합니다. 그건 "뒤로"소리가 나지 않아 –
죄송합니다. 고맙습니다. –