How do I use a Tkinter button to run a Python script? -
i finished dice roll program i've been working on , want add 1 last thing: want add button says "roll dice". there way run python script tkinter button? i've tried use:
from tkinter import * master = tk() def callback(): code here b = button(master, text="button text", command=callback) b.pack() mainloop()
but when use that, pygame window black.
the code program is:
exec(open("dice crop.py").read(), globals()) pygame.locals import * random import randint tkinter import * import pygame import sys pygame.init() font = pygame.font.sysfont("comicsansms",30) screen = pygame.display.set_mode((284,177),0,32) background = pygame.image.load("background.jpg").convert() 1 = pygame.image.load("one.png").convert_alpha() 2 = pygame.image.load("two.png").convert_alpha() 3 = pygame.image.load("three.png").convert_alpha() 4 = pygame.image.load("four.png").convert_alpha() 5 = pygame.image.load("five.png").convert_alpha() 6 = pygame.image.load("six.png").convert_alpha() counter = 0 while true: evt in pygame.event.get(): if evt.type == pygame.quit: pygame.quit() sys.exit() screen.blit(background,(0, 0)) if counter < 20: n = randint(1,6) counter += 1 if n == 1: screen.blit(one,(100,50)) screen.blit(font.render("1",true,(0,200,0)),(125,130)) if n == 2: screen.blit(two,(100,50)) screen.blit(font.render("2",true,(0,200,0)),(125,130)) if n == 3: screen.blit(three,(100,50)) screen.blit(font.render("3",true,(0,200,0)),(125,130)) if n == 4: screen.blit(four,(100,50)) screen.blit(font.render("4",true,(0,200,0)),(125,130)) if n == 5: screen.blit(five,(100,50)) screen.blit(font.render("5",true,(0,200,0)),(125,130)) if n == 6: screen.blit(six,(100,50)) screen.blit(font.render("6",true,(0,200,0)),(125,130)) if counter < 20: print(n) if counter == 20: print(">",n,"<") pygame.time.delay(100) pygame.display.update()
(all exec(open("dice crop.py").read(), globals())
open python script takes 1 image multiple dice , slices separate images.)
you can use pygame.rect
button. rects have collidepoint
method can pass mouse position when user clicks mouse button. mouse events have pos
attribute can pass collidepoint
, or alternatively call pygame.mouse.get_pos()
.
from random import randint import pygame import sys pygame.init() font = pygame.font.sysfont("comicsansms", 30) screen = pygame.display.set_mode((284, 177), 0, 32) 1 = font.render("1", true, (0,200,0)) 2 = font.render("2", true, (0,200,0)) 3 = font.render("3", true, (0,200,0)) 4 = font.render("4", true, (0,200,0)) 5 = font.render("5", true, (0,200,0)) 6 = font.render("6", true, (0,200,0)) # put images list or dictionary # avoid repetition in while loop. dice = [one, two, three, four, five, six] button = pygame.rect(5, 5, 120, 40) button_text = font.render("roll dice", true, (0,200,0)) rolling = false counter = 0 n = 0 while true: evt in pygame.event.get(): if evt.type == pygame.quit: pygame.quit() sys.exit() elif evt.type == pygame.mousebuttondown: # check if mouse clicked on button. if button.collidepoint(evt.pos): # start rolling , reset counter. rolling = true counter = 0 if rolling: if counter < 20: n = randint(1,6) counter += 1 print(n) elif counter == 20: rolling = false print(">",n,"<") screen.fill((30, 30, 30)) pygame.draw.rect(screen, (70, 80, 90), button) screen.blit(button_text, (button.x+3, button.y-2)) # blit current image (index [n-1] of list). screen.blit(dice[n-1],(100,50)) pygame.time.delay(100) pygame.display.update()
Comments
Post a Comment