Python-根据按下按钮的时间将值传回main()
如果这是一种糟糕的做事方式,请原谅我,但总体而言,我对开发是新手 我试图使用tkinter创建一个包含多个按钮的窗口,每个按钮上都有一个播放器的名称,使用一个名为from main()的类 然后,我希望能够使用稍后在应用程序中按下的按钮上的名称,因此我希望将其传递回main()。因此,如果我点击Annie按钮,我想打开一个新窗口,称为“Annie的选项”,我假设值“Annie”需要传递回主函数 我的主要代码:Python-根据按下按钮的时间将值传回main(),python,python-3.x,tkinter,Python,Python 3.x,Tkinter,如果这是一种糟糕的做事方式,请原谅我,但总体而言,我对开发是新手 我试图使用tkinter创建一个包含多个按钮的窗口,每个按钮上都有一个播放器的名称,使用一个名为from main()的类 然后,我希望能够使用稍后在应用程序中按下的按钮上的名称,因此我希望将其传递回main()。因此,如果我点击Annie按钮,我想打开一个新窗口,称为“Annie的选项”,我假设值“Annie”需要传递回主函数 我的主要代码: <imports appear here> def main():
<imports appear here>
def main():
players = ['Annie','Benny','Carrie','Donny']
winHome = playerWindow(root,players)
print("In main() : " + winHome.selected)
root.mainloop()
if __name__ == "__main__":
main()
def main():
玩家=['Annie'、'Benny'、'Carrie'、'Donny']
winHome=playerWindow(root,玩家)
打印(“在main():”+winHome.selected)
root.mainloop()
如果名称=“\uuuuu main\uuuuuuuu”:
main()
我的班级代码:
<imports appear here>
root=Tk()
class playerWindow():
def selectPlayer(self,selname):
self.selected = selname
print("In class: " + self.selected)
def __init__(self, master, players=[]):
colours = ['red','green','orange','white','yellow','blue']
self.selected = ""
r = 0
for p in players:
randcol = random.randint(0,len(colours))-1
if colours[randcol] in ('blue','green'):
fgcol='white'
else:
fgcol='black'
playername = delplayer = p
playername = Button(root, text=playername, bg=colours[randcol], fg=fgcol, width=15, command=lambda name = playername:self.selectPlayer(name)).grid(row=r,column=0)
s = ttk.Separator(root, orient=VERTICAL)
delplayer = Button(root, text='Del', bg='grey', fg='red', width=5, command=lambda name = delplayer: print("Delete Player %s" % name)).grid(row=r,column=1)
r = r + 1
Button(root, text="New Player", fg="black", command=lambda: print("New Player Functionality"), width=15).grid(row = len(players)+3,column=0)
Button(root, text="QUIT", fg="red", command=root.destroy, width=15).grid(row = len(players)+3,column=1)
root=Tk()
类playerWindow():
def selectPlayer(self,selname):
self.selected=selname
打印(“类内:+self.selected)
def uuu init(self,master,players=[]):
颜色=[‘红色’、‘绿色’、‘橙色’、‘白色’、‘黄色’、‘蓝色’]
self.selected=“”
r=0
对于p-in玩家:
randcol=random.randint(0,len(颜色))-1
如果颜色[randcol]为('blue','green'):
fgcol='white'
其他:
fgcol='黑色'
playername=delplayer=p
playername=Button(root,text=playername,bg=colors[randcol],fg=fgcol,width=15,command=lambda name=playername:self.selectPlayer(name)).grid(行=r,列=0)
s=ttk.分隔符(根,方向=垂直)
delplayer=按钮(根,text='Del',bg='grey',fg='red',width=5,command=lambda name=delplayer:print(“删除播放器%s”%name))。网格(行=r,列=1)
r=r+1
按钮(root,text=“New Player”,fg=“black”,command=lambda:print(“New Player功能”),宽度=15)。网格(row=len(players)+3,column=0)
按钮(root,text=“QUIT”,fg=“red”,command=root.destroy,width=15)。网格(row=len(players)+3,column=1)
正在发生的事情是,创建了窗口,main()中的下一行运行(我添加的print语句),该行为空,显然main正在继续。当我按下按钮时,sleectPlayer功能被调用并工作
不知何故,我需要将该值返回main()以使用该值继续执行下一个任务,但是我似乎无法正确地构建问题以获得所需的答案
任何帮助都将不胜感激
我正在使用Python 3.5.1,您已经在访问它了。我个人不喜欢返回到main函数,相反,我建议创建一个顶级类来链接回它。这应该有助于让事情变得更好
import tkinter as tk
from tkinter import ttk
import random
class PlayerWindow():
def __init__(self, master, parent, players=[]):
self._parent = parent
colours = ['red','green','orange','white','yellow','blue']
self.selected = ""
r = 0
for p in players:
randcol = random.randint(0,len(colours))-1
if colours[randcol] in ('blue','green'):
fgcol='white'
else:
fgcol='black'
playername = delplayer = p
playername = tk.Button(master, text=playername, bg=colours[randcol], \
fg=fgcol, width=15, command=lambda name = \
playername:self.selectPlayer(name)).grid(row=r,column=0)
s = ttk.Separator(master, orient=tk.VERTICAL)
delplayer = tk.Button(master, text='Del', bg='grey', fg='red', \
width=5, command=lambda name = delplayer: \
print("Delete Player %s" % name)).grid(row=r,column=1)
r = r + 1
tk.Button(master, text="New Player", fg="black", command=lambda: \
print("New Player Functionality"), width=15).\
grid(row = len(players)+3,column=0)
tk.Button(master, text="QUIT", fg="red", command=self._parent.close,
width=15).grid(row = len(players)+3,column=1)
def selectPlayer(self, selname):
self.selected = selname
print("In class: " + self.selected)
self._parent.hello() # call hello function of top-level, links back
class MyApplication(object):
def __init__(self, master):
self._master = master
players = ['Annie','Benny','Carrie','Donny']
self._player_window = PlayerWindow(master, self, players)
print("In main() : " + self._player_window.selected)
def hello(self):
name = self._player_window.selected
print("Hello, %s" % name)
def close(self):
# any other clean-up
self._master.destroy()
def main():
root = tk.Tk()
app = MyApplication(root)
root.mainloop()
if __name__ == "__main__":
main()
非常感谢!这让我前进了很多。你的压痕被打破了。