#python #list #tkinter #random
#python #Список #tkinter #Случайный
Вопрос:
import random
from tkinter import *
win = Tk()
win.geometry("700x600")
win.title("pengocok keberuntungan")
isi = Entry(win,width=25,font =("arial",25))
isi.pack()
isi2 = Text(win,width=56,height=25,font=("arial",10))
isi2.pack()
mylist = (list(range(1,35)))
b = random.sample(mylist,34)
print (b)
def acak():
for i in b:
pass
isi.delete(0,END)
isi.insert(END,i)
isi2.insert(END,isi.get() "n")
acak_tombol = Button (win,text = "di acak",command =acak)
acak_tombol.pack(pady=20)
win.mainloop()
Моя проблема в том, что когда я нажимаю кнопку, она уже мгновенно рандомизирует всех моих 34 друзей. Я хочу, чтобы каждый раз, когда я нажимаю кнопку «acak», 1 из моих рандомизированных одноклассников вставлялся в текстовое поле и не мог быть удвоен, пока все мои 34 друга не получат своего товарища по команде. Кстати, как мне связать этот отсутствующий номер с моими 34 одноклассниками? Итак, что появится при нажатии кнопки «acak», так это имя моего друга, и отсутствующий номер вставляется в текстовое поле один за другим, а не мгновенно, как моя проблема.
Комментарии:
1. Просто … не делайте цикл, тогда? Я не понимаю, почему это сбивает с толку. Вам нужна функция обратного вызова, которая добавляет один элемент
b
к двум виджетам. Это делает внутренняя часть вашего цикла.2. извините … я не знаю, как вызвать все элементы в списке по одному. one…so я использую цикл, потому что функция цикла может вызывать все элементы в списке….
3. Вам не нужно делать ничего особенного, кроме как продолжать нажимать на кнопку. В коде не должно быть цикла. Вы должны написать код так, чтобы кнопка обрабатывала один элемент. Когда вы снова нажмете на кнопку, она будет обрабатывать другой элемент.
Ответ №1:
Сначала вы можете создать случайный список и ссылаться на него один за другим с индексом при нажатии кнопки. таким образом, одно и то же число не будет повторяться.
Пожалуйста, обратитесь к приведенному ниже коду.
import random
from tkinter import *
win = Tk()
win.geometry("700x600")
win.title("pengocok keberuntungan")
isi = Entry(win,width=25,font =("arial",25))
isi.pack()
isi2 = Text(win,width=56,height=25,font=("arial",10))
isi2.pack()
mylist = (list(range(1,35)))
b = random.sample(mylist,34)
i=0
print (b)
def acak():
global b
global i
if i<len(b):
isi.delete(0,END)
isi.insert(END,b[i])
i =1
isi2.insert(END,isi.get() "n")
acak_tombol = Button (win,text = "di acak",command =acak)
acak_tombol.pack(pady=20)
win.mainloop()
Комментарии:
1. спасибо …. этот код работает … кстати… для чего нужна глобальная функция??
2.
global
используется для доступа к переменным, которые объявлены вне функции в глобальной области видимости.
Ответ №2:
Переместите строку b = random.sample(mylist, 34)
в функцию. Она будет выполняться каждый раз, когда вы вызываете функцию.