Python GUI中带有字段的按钮

Python GUI中带有字段的按钮,python,user-interface,tkinter,Python,User Interface,Tkinter,你可能熟悉也可能不熟悉一款叫做“狼人”的流行派对游戏——游戏的细节在这里并不重要,但我正在尝试制作一个程序,它将决定参赛队伍 我有以下相当简单的代码-它由3个方法组成,我希望将它们附加到按钮上,然后在程序运行时显示在窗口中 代码如下所示: from Tkinter import * from random import randint # import random integer generator playerList = [] numberOfWolves = 0 def setWolf

你可能熟悉也可能不熟悉一款叫做“狼人”的流行派对游戏——游戏的细节在这里并不重要,但我正在尝试制作一个程序,它将决定参赛队伍

我有以下相当简单的代码-它由3个方法组成,我希望将它们附加到按钮上,然后在程序运行时显示在窗口中

代码如下所示:

from Tkinter import *
from random import randint # import random integer generator
playerList = []
numberOfWolves = 0

def setWolfNumber(x):
    numberOfWolves = x
def listAdd(string):
    playerList.append(string)

def chooseTeams():

    werewolves = [] # list of wolves, populated later for printing
    villagers = [] # same as wolves but for villiagers
    for x in range(0,len(playerList)): # loop for the number of players. Each iteration chooses a random player and decides whether they're a werewolf or not. After 2 werewolves it just adds villagers.

        random = randint(0,len(playerList)-1)
        player = playerList[random]
        decide = randint(0,1)
        if decide == 0 and len(werewolves) < numberOfWolves:
            werewolves.append(player)
        else:
            villagers.append(player)
        playerList.remove(player)

    for wolf in werewolves: #prints wolf names
        print  wolf +  " is a werewolf"

    seer = villagers[randint(0,len(villagers))-1] #decide seer, print that, make sure they won't be reprinted with villagers
    villagers.remove(seer)
    print seer + " is the seer"

    doctor = villagers[randint(0,len(villagers))-1] #same as seer but with the doctor
    villagers.remove(doctor)
    print doctor + " is the doctor"

    for villager in villagers: # print villagers
        print villager + " is a villager"

top = Tk()
top.wm_title("Werewolves Team Chooser")
w = Button(top)
top.mainloop()
从Tkinter导入*
从随机导入randint#导入随机整数生成器
playerList=[]
NumberOfWolfs=0
def setWolfNumber(x):
数量=x
def listAdd(字符串):
playerList.append(字符串)
def chooseTeams():
狼人=[]#狼列表,稍后填充以供打印
村民=[]#与狼一样,但对村民而言
对于范围内的x(0,len(playerList)):#循环表示玩家数量。每次迭代选择一个随机玩家,并决定他们是否是狼人。在2个狼人之后,它只是增加了村民。
random=randint(0,len(playerList)-1)
玩家=玩家列表[随机]
decise=randint(0,1)
如果Decise==0且len(狼人)
我相信您可以看到,GUI的代码非常不完整。有人能告诉我如何在GUI中显示字段,并将它们附加到按钮上吗?实际上,我所寻找的是一个增加玩家的领域,一个设定狼人数量的领域;然后是一个按钮,它获取信息并决定团队-使用提供的方法

任何帮助都将不胜感激

奖励:将成品转换为可执行文件以便我的朋友也可以使用它有多难


非常感谢

您的按钮未显示,因为您尚未对其调用pack。实际上,您创建了一个按钮,但尚未将其添加到窗口中。有三个布局管理器可用于添加“小部件”(GUI中Tkinter的名称)。它们是包、网格和位置。对于一个简单的窗口,如您正在制作的窗口,pack应该可以正常工作。当您以后执行更大的项目时,网格将成为一个非常有用的工具。创建按钮后,将w.pack()添加到代码中后,您将看到按钮没有名称。您可以通过将text=“some text”添加到构造函数中的参数来添加它。类似地,您可以使用callback=function(注意缺少括号)向按钮添加操作,并将其绑定到操作。您还可以创建类似于按钮创建方式的“字段”。简单地使用Entry()并填充所需的参数(我建议查找StringVar以获取有关检索输入的信息)

从最终的项目中生成一个exe并不太糟糕。就我个人而言,我喜欢使用PyInstaller,它接受脚本的名称和一些参数,并为您创建整个过程。还有其他工具,比如py2exe,也可以做同样的事情

祝你好运!(另请注意,这是一个很棒的游戏,希望一切顺利!)