Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- import tkinter.simpledialog as sdg
- import tkinter.messagebox as mbx
- import tkinter.font as tkf
- import random as rnd
- class diceRollStatsRoot(sdg.Dialog):
- def body(self, master):
- self.title("New Character: Dice Roll Stats")
- self.resizable(False, False)
- self.letters = ('A', 'B', 'C', 'D', 'E', 'F')
- self.rolled = False
- self.rolls = [0, 0, 0, 0, 0, 0]
- self.rollsVar = tk.StringVar()
- self.rollsVar.set("Press \"Roll\" to begin!")
- tk.Label(master, text = "Set each stat to a unique lettered value", font = ftSmall).grid(row = 0, columnspan = 3)
- rollsLbl = tk.Label(master, textvariable = self.rollsVar, width = 36, relief = "ridge", font = ftNormal)
- rollsLbl.grid(row = 1, column = 0, columnspan = 2)
- tk.Button(master, text = "Roll", command = self.rollStats, cursor = "hand2", font = ftNormal).grid(row = 1, column = 2)
- tk.Label(master, text = "Strength", font = ftNormal).grid(row = 2, column = 0)
- tk.Label(master, text = "Dexterity", font = ftNormal).grid(row = 3, column = 0)
- tk.Label(master, text = "Constitution", font = ftNormal).grid(row = 4, column = 0)
- tk.Label(master, text = "Intelligence", font = ftNormal).grid(row = 5, column = 0)
- tk.Label(master, text = "Wisdom", font = ftNormal).grid(row = 6, column = 0)
- tk.Label(master, text = "Charisma", font = ftNormal).grid(row = 7, column = 0)
- self.STRSbx = tk.Spinbox(master, values = self.letters)
- self.DEXSbx = tk.Spinbox(master, values = self.letters)
- self.CONSbx = tk.Spinbox(master, values = self.letters)
- self.INTSbx = tk.Spinbox(master, values = self.letters)
- self.WISSbx = tk.Spinbox(master, values = self.letters)
- self.CHASbx = tk.Spinbox(master, values = self.letters)
- self.STRSbx.grid(row = 2, column = 1, columnspan = 2)
- self.DEXSbx.grid(row = 3, column = 1, columnspan = 2)
- self.CONSbx.grid(row = 4, column = 1, columnspan = 2)
- self.INTSbx.grid(row = 5, column = 1, columnspan = 2)
- self.WISSbx.grid(row = 6, column = 1, columnspan = 2)
- self.CHASbx.grid(row = 7, column = 1, columnspan = 2)
- def validate(self):
- if not self.rolled:
- mbx.showerror("Error", "You must roll at least once!")
- return 0
- selections = []
- selections.append(self.STRSbx.get())
- selections.append(self.DEXSbx.get())
- selections.append(self.CONSbx.get())
- selections.append(self.INTSbx.get())
- selections.append(self.WISSbx.get())
- selections.append(self.CHASbx.get())
- for l in self.letters:
- if selections.count(l) > 1:
- mbx.showerror("Error", "Each lettered value must be used, and used only once!")
- return 0
- return 1
- def apply(self):
- resultString = ""
- resultString += str(self.rolls[self.letters.index(self.STRSbx.get())]) + "|"
- resultString += str(self.rolls[self.letters.index(self.DEXSbx.get())]) + "|"
- resultString += str(self.rolls[self.letters.index(self.CONSbx.get())]) + "|"
- resultString += str(self.rolls[self.letters.index(self.INTSbx.get())]) + "|"
- resultString += str(self.rolls[self.letters.index(self.WISSbx.get())]) + "|"
- resultString += str(self.rolls[self.letters.index(self.CHASbx.get())]) + "\n"
- resultString += str((self.rolls[self.letters.index(self.STRSbx.get())] - 10) // 2) + "|"
- resultString += str((self.rolls[self.letters.index(self.DEXSbx.get())] - 10) // 2) + "|"
- resultString += str((self.rolls[self.letters.index(self.CONSbx.get())] - 10) // 2) + "|"
- resultString += str((self.rolls[self.letters.index(self.INTSbx.get())] - 10) // 2) + "|"
- resultString += str((self.rolls[self.letters.index(self.WISSbx.get())] - 10) // 2) + "|"
- resultString += str((self.rolls[self.letters.index(self.CHASbx.get())] - 10) // 2)
- self.result = resultString
- def rollStats(self):
- tempStats = [0, 0, 0, 0, 0, 0]
- tempRolls = []
- tempStr = ""
- for i in range(len(tempStats)):
- for j in range(4):
- tempRolls.append(rnd.randint(1,6))
- tempRolls.remove(min(tempRolls))
- tempStats[i] = sum(tempRolls)
- tempRolls = []
- for i in range(len(tempStats)):
- self.rolls[i] = tempStats[i]
- tempStr += self.letters[i] + ":" + str(tempStats[i])
- if i < 5:
- tempStr += ", "
- self.rollsVar.set(tempStr)
- self.rolled = True
- base = tk.Tk()
- ftSmall = tkf.Font(family = "Consolas", size = 8)
- ftNormal = tkf.Font(family = "Consolas", size = 10)
- diceRollStatsRoot(base)
Advertisement
Add Comment
Please, Sign In to add comment