я новичок в Python, и я хочу создать программу рандомизации отсутствующих членов команды с помощью tkinter

#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) в функцию. Она будет выполняться каждый раз, когда вы вызываете функцию.