#python-3.x #list #function #class
Вопрос:
Я создаю программу с графическим интерфейсом, в которой есть две кнопки. Когда я нажимаю первую кнопку, я хочу сгенерировать случайный код. Когда я нажимаю вторую кнопку, я хочу увидеть список кодов, сгенерированных с помощью первой кнопки. (Пока просто распечатайте список кодов в окне «Выполнить».) Мой сценарий следующий:
class Ui_Main_Window(object):
# For the first button:
def Code_maker(self):
import random
Codes_list = []
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!$%^amp;*`#/?[]{}-_~"
for x in range(1):
password = ""
for y in range(0, 10):
password_char = random.choice(chars)
password = password_char
print(password)
Codes_list.append(password)
# For the second button:
def show_list(self):
print (Codes_list)
# To connect the actions with the buttons:
def setupUi(self, Main_Window):
# After some code...
self.Button_New_code.clicked.connect(self.Code_maker)
# After some code...
self.Button_Show_list.clicked.connect(self.show_list)
# The continuation of the program...
Моя проблема в том, что, когда я нажимаю первую кнопку, код успешно генерируется и выводится в окно «Выполнить». Но когда я нажимаю вторую кнопку, программа выходит из строя, и через несколько секунд она закрывается. Я получаю эту ошибку:
> Unresolved reference 'Codes_list'.
(Я использую Pycharm, и ошибка отображается не в окне «Выполнить», а в окне «Проблемы».)
Я попытался восстановить его с помощью глобального списка, но программа работает хуже. Он вылетает, когда я нажимаю какую-либо из двух кнопок… Если я напишу код таким образом, он станет:
class Ui_Main_Window(object):
Codes_list = []
# For the first button:
def Code_maker(self):
import random
global Codes_list
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!$%^amp;*`#/?[]{}-_~"
for x in range(1):
password = ""
for y in range(0, 10):
password_char = random.choice(chars)
password = password_char
print(password)
Codes_list.append(password)
# For the second button:
def show_list(self):
print (Codes_list)
# To connect the actions with the buttons:
def setupUi(self, Main_Window):
# After some code...
self.Button_New_code.clicked.connect(self.Code_maker)
# After some code...
self.Button_Show_list.clicked.connect(self.show_list)
Я искал информацию о своей проблеме в Google, но я перепробовал так много вещей, что не помню, что я пробовал. Ничего не помогало.
Ответ №1:
Это должно сработать. Я добавил комментарии к строкам, которые я добавил или изменил для вашей справки. Не могли бы вы, пожалуйста, проверить?
class Ui_Main_Window(object):
def __init__(self):
# added the constructor to attach the list with the object itself
self.Codes_list = [] #this will contain the numbers
# For the first button:
def Code_maker(self):
import random
#Codes_list = [] # Removed
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!$%^amp;*`#/?[]{}-_~"
for x in range(1):
password = ""
for y in range(0, 10):
password_char = random.choice(chars)
password = password_char
print(password)
self.Codes_list.append(password) # modified to update the object attribute
# For the second button:
def show_list(self):
print (self.Codes_list) # modified to access the object attribute
# To connect the actions with the buttons:
def setupUi(self, Main_Window):
# After some code...
self.Button_New_code.clicked.connect(self.Code_maker)
# After some code...
self.Button_Show_list.clicked.connect(self.show_list)
# The continuation of the program...