इसलिए, मैं स्कूल में अजगर सीख रहा हूं और अपनी वर्तमान परियोजना के एक भाग के रूप में मैं स्क्रीन पर छोटे "पॉपअप" बनाने में सक्षम होना चाहता हूं। मैंने इसे wxpython के साथ करना चुना है लेकिन मैंने एक समस्या में भाग लिया है। अभी मुझे एक चर जोड़ने का कोई तरीका नहीं मिल रहा है, इसलिए मैं जो कुछ भी चाहता हूं उसे प्रिंट कर सकता हूं। मैंने कक्षा और init फ़ंक्शन दोनों में एक अतिरिक्त चर जोड़ने का प्रयास किया लेकिन दोनों के लिए एक त्रुटि प्राप्त की। मुझे कक्षाओं की आदत नहीं है या वे कैसे काम करते हैं और मैं वास्तव में कुछ मदद की सराहना करता हूं। मैं जिस कोड का उपयोग कर रहा हूं वह यहां है:

import wx

class HelloFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        pnl = wx.Panel(self)
        st = wx.StaticText(pnl, label = "Betting")
        font = st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        st.SetFont(font)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 25))
        pnl.SetSizer(sizer)

        self.makeMenuBar()
        self.CreateStatusBar()
        self.SetStatusText("Welcome to wxPython!")

    def makeMenuBar(self):
        fileMenu = wx.Menu()
        helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H",
        "Help string shown in status bar for this menu item")
        fileMenu.AppendSeparator()
        exitItem = fileMenu.Append(wx.ID_EXIT)

        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "&file")
        menuBar.Append(helpMenu, "&help")

        self.SetMenuBar(menuBar)

        self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
        self.Bind(wx.EVT_MENU, self.OnExit, exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)

    def OnExit(self, event):
        self.Close(True)

    def OnHello(self, event):
        wx.MessageBox("Hello again from wxPython")

    def OnAbout(self, event):
        wx.MessageBox("This is a wxPython Hello World Sample", "About Hello World 2", wx.OK|wx.ICON_INFORMATION)

if __name__ == '__main__':
    x = number()
    app = wx.App()
    frm = HelloFrame(None, title='Betting predictions')
    frm.Show()
    app.MainLoop()

अब मैं st = wx.StaticText(pnl, label = "Betting") में एक लेबल के रूप में कुछ भी इनपुट करने में सक्षम होना चाहता हूं बस "सट्टेबाजी" के बजाय और मुझे जो भी पाठ चाहिए, उसे दिखाएं, लेकिन मेरे जीवन के लिए मैं इसका पता नहीं लगा सकता। यह मेरी परियोजना का एक अपेक्षाकृत छोटा हिस्सा है क्योंकि मैं कर चुका हूं और मेरे पास कुछ अतिरिक्त समय है लेकिन मैं वास्तव में इसे काम पर लाना चाहूंगा।

0
Elliot Stjernqvist 7 अप्रैल 2020, 17:55

2 जवाब

@Petr Blahos के instance वैरिएबल को क्रियान्वित किया गया।
ध्यान दें कि self.st.SetLabel() को MessageBox से पहले लागू किया जाता है या जब तक संदेश रद्द नहीं किया जाता तब तक लेबल अपडेट नहीं किया जाएगा। self.mycount को एक आवृत्ति चर के रूप में भी घोषित किया गया है।

import wx

class HelloFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        pnl = wx.Panel(self)
        self.st = wx.StaticText(pnl, label = "Betting")
        font = self.st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        self.st.SetFont(font)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 25))
        pnl.SetSizer(sizer)

        self.makeMenuBar()
        self.CreateStatusBar()
        self.SetStatusText("Welcome to wxPython!")
        self.mycount = 0
    # Show Frame and initially call OnHello (use None to compensate for a lack of event)
        self.Show()
        self.OnHello(None)

    def makeMenuBar(self):
        fileMenu = wx.Menu()
        helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H",
        "Help string shown in status bar for this menu item")
        fileMenu.AppendSeparator()
        exitItem = fileMenu.Append(wx.ID_EXIT)

        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "&file")
        menuBar.Append(helpMenu, "&help")

        self.SetMenuBar(menuBar)

        self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
        self.Bind(wx.EVT_MENU, self.OnExit, exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)

    def OnExit(self, event):
        self.Close(True)

    def OnHello(self, event):
        self.mycount += 1
        mystring = "Betting Display No: " + str(self.mycount)
        self.st.SetLabel(mystring)
        wx.MessageBox("Hello again from wxPython")

    def OnAbout(self, event):
        wx.MessageBox("This is a wxPython Hello World Sample", "About Hello World 2", wx.OK|wx.ICON_INFORMATION)

if __name__ == '__main__':
    app = wx.App()
    frm = HelloFrame(None, title='Betting predictions')
    #frm.Show()
    app.MainLoop()

enter image description here

नोट: आप हमेशा एक self.message बना सकते हैं जिसे फ़ंक्शन के बाहर सेट किया जा सकता है और फिर भी इसके भीतर उपयोग किया जा सकता है। लैम्ब्डा फ़ंक्शन का प्रयास करने से यह आसान है।

1
Rolf of Saxony 9 अप्रैल 2020, 12:56
हालांकि यह खिड़की में बटन दबाते समय लेबल बदलने के लिए काम करता है, मैं इसे शुरू से ही बदलने में सक्षम होना चाहता हूं। मैंने ऐसा कुछ करने की कोशिश की है: def OnHello(self, event, label): self.mycount += 1 #mystring = "बेटिंग डिस्प्ले नंबर:" + str(self.mycount) self.st.SetLabel(label) wx. MessageBox("WxPython से फिर से नमस्ते") लेकिन फिर मुझे नहीं पता कि इस फ़ंक्शन को कहां कॉल करना है और एक लेबल इनपुट करना है क्योंकि मैं इसे कभी कॉल नहीं कर रहा हूं, बस frm = HelloFrame (कोई नहीं, शीर्षक = 'सट्टेबाजी की भविष्यवाणी')
 – 
Elliot Stjernqvist
9 अप्रैल 2020, 11:59

आप स्थिर पाठ पर SetLabel सदस्य फ़ंक्शन को कॉल करके लेबल बदल सकते हैं। अब आप st को फंक्शन init के स्थानीय चर के रूप में बना रहे हैं। आपको इसे इस तरह एक आवृत्ति चर बनाने की आवश्यकता है:

class HelloFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        pnl = wx.Panel(self)
        self.st = wx.StaticText(pnl, label = "Betting")
        [...]
        # then everywhere you use it, use self.st to access it like this:
        self.st.SetFont(font)

और यदि आप लेबल बदलना चाहते हैं, उदाहरण के लिए मेनू आइटम का चयन करने के बाद:

def OnHello(self, event):
    wx.MessageBox("Hello again from wxPython")
    self.st.SetLabel("Changed label")

या यदि आप विंडो बनाते समय टेक्स्ट सेट करना चाहते हैं, तो आप फ़ंक्शन (कंस्ट्रक्टर) के लिए एक पैरामीटर पास कर सकते हैं:

class HelloFrame(wx.Frame):
    def __init__(self, label_title, frame_title):
        super(HelloFrame, self).__init__(title=frame_title)

        pnl = wx.Panel(self)
        self.st = wx.StaticText(pnl, label = label_title)
        [...]

if __name__ == '__main__':
    t = "Some text"
    app = wx.App()
    frm = HelloFrame(None, t, frame_title='Betting predictions')
    frm.Show()
    app.MainLoop()
1
Petr Blahos 10 अप्रैल 2020, 09:39
क्षमा करें, लेकिन कोड का उपयोग करने का प्रयास करते समय मुझे यह त्रुटि मिल रही है: frm = HelloFrame (कोई नहीं, info_string, शीर्षक = 'सट्टेबाजी की भविष्यवाणी') सुपर (HelloFrame, self).__init__(*args, **kw) TypeError: Frame( ): तर्क किसी भी अतिभारित कॉल से मेल नहीं खाते: अधिभार 1: बहुत अधिक तर्क अधिभार 2: तर्क 1 में अप्रत्याशित प्रकार 'str' है
 – 
Elliot Stjernqvist
9 अप्रैल 2020, 11:58
उफ़! फिक्स्ड। धन्यवाद।
 – 
Petr Blahos
10 अप्रैल 2020, 09:39