我对python编程很陌生并且有一个基本的问题,我似乎无法解决这个问题 - 我希望有人能够对此有所了解!
我创建了一个.py
文件,该文件在用户和(随机)计算机之间运行基本的Rock,Paper,Scissors游戏。这通过tk()
使用GUI并且工作得很好。
然后,我创建了另一个.py
文件,这次创建了一个整体菜单GUI,我可以从中选择运行我的Rock,Paper,Scissors游戏。我可以创建这个tk()
罚款,选择RPS游戏的按钮,游戏加载,但这次它根本不起作用!我可以按下按钮,但他们不会进行游戏。
以下是game.py
的代码:
from tkinter import *
from tkinter.ttk import *
import random
def gui():
<game code goes in here, including other functions>
root=Tk()
root.title("Rock, Paper, Scissors")
# more code to define what this looks like
# including a Frame, buttons, labels, etc>
if __name__=='__main__':
gui()
然后我创建了整个游戏菜单,menu.py:
from tkinter import *
from tkinter.ttk import *
import random
import game
main=Tk()
main.title("J's games")
mainframe=Frame(main,height=200,width=500)
mainframe.pack_propagate(0)
mainframe.pack(padx=5,pady=5)
intro=Label(mainframe,
text="""Welcome to J's Games. Please make your (RPS) choice.""")
intro.pack(side=TOP)
rps_button=Button(mainframe, text="Rock,Paper,Scissors", command=game.gui)
rps_button.pack()
test_button=Button(mainframe,text="Test Button")
test_button.pack()
exit_button=Button(mainframe,text="Quit", command=main.destroy)
exit_button.pack(side=BOTTOM)
main.mainloop()
如果有人能看到明显的东西,请告诉我。我很困惑为什么它自己工作,但是当我把它合并到另一个函数(按钮命令)时。我已经尝试过IDLE调试,但它似乎冻结了我!
答案 0 :(得分:0)
我认为你想要在选择特定游戏时保留主窗口。这意味着游戏应该在一个单独的框架中,最初是在一个单独的Toplevel中。修改您的rps文件,如下所示,
from tkinter import *
from tkinter.ttk import *
import random
class RPS(Toplevel):
def __init__(self, parent, title):
Toplevel.__init__(parent)
self.title(title)
#game code goes in here, including other functions
# more code to define what this looks like
# including a Frame, buttons, labels, etc>
if __name__=='__main__':
root=Tk()
root.withdraw()
RPS(title = "Rock, Paper, Scissors")
root.mainloop()
这样,导入文件不会创建第二个根和主循环。
如果您一次只想运行一个游戏,则可以改为使用带有两个窗格的paned窗口。 Turtledemo做到了这一点。代码在turtledemo中。主要。然后,您将从Frame派生RPS并将其打包到第二个窗格中。