1 Востаннє редагувалося A.N.Onim (18.05.2014 11:30:09)

Тема: Питання по wxPython

Доброго дня!

# _*_ coding: cp1251 _*_


import wx

class Edit(wx.TextCtrl):
    pass

class Button(wx.Button):
    pass

class Frame(wx.Frame):
    pass

class App(wx.App):
    
    def OnInit(self):
        self.frame = Frame(parent=None, title=u'Телефоний довідник', size=(750, 450))
        self.frame.SetBackgroundColour('White')
        self.SetTopWindow(self.frame)
        buttLoadingFromFile = Button(self.frame, -1, u'Завантаження з файлу', pos=(30, 20), size=(250, 26))
        buttAddRecord = Button(self.frame, -1, u'Додання запису', pos=(30, 50), size=(250, 26))
        buttPrintRecordABC = Button(self.frame, -1, u'Вивід записів в алфавітному порядку', pos=(30, 80), size=(250, 26))
        buttLoadingToFile = Button(self.frame, -1, u'Збереження даних у файл', pos=(30, 110), size=(250, 26))
        buttClearDict = Button(self.frame, -1, u'Очищення довідника', pos=(30, 140), size=(250, 26))
        buttPrintRecord = Button(self.frame, -1, u'Вивід запису', pos=(30, 170), size=(250, 26))
        buttCheckingExistenseCaller = Button(self.frame, -1, u'Перевірка існування абонента', pos=(30, 200), size=(250, 26))
        buttSearchCallerByNumber = Button(self.frame, -1, u'Пошук абонента за номером', pos=(30, 230), size=(250, 26))
        buttAdd380 = Button(self.frame, -1, u'Додання +380', pos=(30, 260), size=(250, 26))
        buttDeleteRecord = Button(self.frame, -1, u'Видалення запису', pos=(30, 290), size=(250, 26))
        buttPrintOfNumberABC = Button(self.frame, -1, u'Вивід номерів в алфавітному порядку', pos=(30, 320), size=(250, 26))
        buttExit = Button(self.frame, -1, u'Вихід', pos=(30, 350), size=(250, 26))
        EditKey = Edit(self.frame, -1, "Ім'я абонента", pos=(300, 20), size=(200, 24))
        EditValue = Edit(self.frame, -1, "Номер телефону", pos=(525, 20), size=(200, 24))
        EditMemo = Edit(self.frame, -1, pos=(300, 50), size=(425, 328), style=wx.TE_MULTILINE)
    
        self.Bind(wx.EVT_BUTTON, self.OnExit, buttExit)
        self.frame.Show()
        return True
    def OnExit(self, event):
        self.EditKey.Clear()
        
if __name__ == '__main__':
    tel = {}
    
    app = App()
    app.MainLoop()

Видає помилку(коли натискаєш "Вихід"):

Traceback (most recent call last):
  File "D:\TelefSprav.py", line 41, in OnExit
    self.EditKey.Clear()
AttributeError: 'App' object has no attribute 'EditKey'
TypeError: OnExit() takes exactly 2 arguments (1 given)

Що не так? Допоможіть будь-ласка.

2

Re: Питання по wxPython

Спробуйте

def OnExit(self, event):
    self.EditKey.Clear()

Переписати як

def OnExit(self):
    self.EditKey.Clear()

Якщо йому хочуть один аргумент передавати, то хай приймає один, нащо йому два.

3 Востаннє редагувалося A.N.Onim (18.05.2014 13:08:06)

Re: Питання по wxPython

Змінений код:

Прихований текст
# _*_ coding: cp1251 _*_
# Програма лабораторної роботи №2 з графічним інтерфейсом 

import wx

class Edit(wx.TextCtrl):
    pass

class Button(wx.Button):
    pass

class Frame(wx.Frame):
    pass

class App(wx.App):
    
    def OnInit(self):
        self.frame = Frame(parent=None, title=u'Телефоний довідник', size=(750, 450))
        self.frame.SetBackgroundColour('White')
        self.SetTopWindow(self.frame)
        buttLoadingFromFile = Button(self.frame, -1, u'Завантаження з файлу', pos=(30, 20), size=(250, 26))
        buttAddRecord = Button(self.frame, -1, u'Додання запису', pos=(30, 50), size=(250, 26))
        buttPrintRecordABC = Button(self.frame, -1, u'Вивід записів в алфавітному порядку', pos=(30, 80), size=(250, 26))
        buttLoadingToFile = Button(self.frame, -1, u'Збереження даних у файл', pos=(30, 110), size=(250, 26))
        buttClearDict = Button(self.frame, -1, u'Очищення довідника', pos=(30, 140), size=(250, 26))
        buttPrintRecord = Button(self.frame, -1, u'Вивід запису', pos=(30, 170), size=(250, 26))
        buttCheckingExistenseCaller = Button(self.frame, -1, u'Перевірка існування абонента', pos=(30, 200), size=(250, 26))
        buttSearchCallerByNumber = Button(self.frame, -1, u'Пошук абонента за номером', pos=(30, 230), size=(250, 26))
        buttAdd380 = Button(self.frame, -1, u'Додання +380', pos=(30, 260), size=(250, 26))
        buttDeleteRecord = Button(self.frame, -1, u'Видалення запису', pos=(30, 290), size=(250, 26))
        buttPrintOfNumberABC = Button(self.frame, -1, u'Вивід номерів в алфавітному порядку', pos=(30, 320), size=(250, 26))
        buttExit = Button(self.frame, -1, u'Вихід', pos=(30, 350), size=(250, 26))
        EditKey = Edit(self.frame, -1, "Ім'я абонента", pos=(300, 20), size=(200, 24))
        EditValue = Edit(self.frame, -1, "Номер телефону", pos=(525, 20), size=(200, 24))
        EditMemo = Edit(self.frame, -1, pos=(300, 50), size=(425, 328), style=wx.TE_MULTILINE)
    
        self.Bind(wx.EVT_BUTTON, self.OnExit, buttExit)
        self.frame.Show()
        return True
    def OnExit(self):
        self.EditKey.Clear()
        
if __name__ == '__main__':
    tel = {}
    
    app = App()
    app.MainLoop()

Видає таку помилку:

TypeError: OnExit() takes exactly 1 argument (2 given)
Traceback (most recent call last):
  File "D:TelefSprav.py", line 41, in OnExit
    self.EditKey.Clear()
AttributeError: 'App' object has no attribute 'EditKey'

4

Re: Питання по wxPython

Гуглтранслейт:

Помилка типу: OnExit () приймає рівно 1 аргумент (2 дано) 
Traceback (самий останній виклик в минулому): 
   Файл "D: TelefSprav.py", лінія 41, в OnExit 
     self.EditKey.Clear () 

5

Re: Питання по wxPython

Так дано ж один аргумент:

    def OnExit(self):

6

Re: Питання по wxPython

A.N.Onim написав:

Так дано ж один аргумент:

    def OnExit(self):

Так і інтерпретатор про те. А ще він каже, що функція викликана з двома аргументами.

7 Востаннє редагувалося A.N.Onim (18.05.2014 16:47:52)

Re: Питання по wxPython

Не зрозумію:

Якщо йому хочуть один аргумент передавати, то хай приймає один, нащо йому два.

Помилка типу: OnExit () приймає рівно 1 аргумент (2 дано)

Так і інтерпретатор про те. А ще він каже, що функція викликана з двома аргументами.

Виникає протиріччя: задаю 2 параметра, пише, що потрібен 1, задаю 1 пише, що потрібно 2.
Це як?
Як повинно бути? Якщо викликається з 2 параметрами, а повинен з 1, то як зробити щоб викликався з 1.
Не розумію.

8

Re: Питання по wxPython

Допоможіть, будь-ласка.

9

Re: Питання по wxPython

Я тут глянув на вашу проблему. Як на мене найпростіше рішення замінити OnExit на OnClose

Подякували: A.N.Onim1

10

Re: Питання по wxPython

Уже змінив. Все працює. Питання не актуальне. Дякую.

11

Re: Питання по wxPython

Треба змінити:

        EditKey = Edit(self.frame, -1, "Ім'я абонента", pos=(300, 20), size=(200, 24))

на:

        self.EditKey =  Edit(self.frame, -1, "Ім'я абонента", pos=(300, 20), size=(200, 24))

Якщо ви хочете мати доступ до EditKey через self.

Подякували: A.N.Onim1