うまくいけば、これを十分に具体的にすることができます。私は現在の職場でレーザー カッターのトレーニング用のアプリを作成しています (最近見た人もいます)。研修生に各プロセスを順を追って説明するウィザードを作成することに成功しましたが、ウィザードの形式に問題がありました。
これは Python シェルに表示されるエラーではないため、インタープリターに関する限り、コードに問題はありません。ただし、ウィザードを開くと、すべてのページを一度に表示しようとします。「次へ」ボタンと「前へ」ボタンをクリックするとクリアされますが、ボタンが画面の外に押し出され、手の届かないところにあるため、4ページ目を終了できません(私の画面解像度ウィンドウ全体が収まらず、割り当てられた位置に関係なく、ボタンは常に下部から開始されます)。
誰かが問題の原因とその修正方法を教えてくれたら、大変助かります。
以下にコードを掲載しました。数年前に C++ で作成した DOS ベースの電卓以来、これは正直なところ、私が作成した中で最も複雑なアプリであるため、理解を求めるだけです。つまり、これは GUI を使用した最初のアプリであり、Python で作成した最初のアプリです。したがって、python と、その点での stackoverflow の私の経験は非常に限られています。
ロードされたモジュールの一部はウィザードの一部ではないことに注意してください。それらは、アプリの他の場所で役割を果たします。
#Import the Modules required for proper app function
import os, cgi, pickle
from os.path import *
from tkinter import *
import tkinter
#All other windows must be created as Definitions before the Home Screen/Main Menu is coded.
#All Button Commands must be created as Definitions before their respective windows
#Start Code for the Introduction Wizard
def wizIntro():
wizIntro = tkinter.Tk()
#Title:
wizIntro.title('Welcome to Training')
#Content:
page1 = Frame(wizIntro)
Label(page1, text='', width=110).pack()
Label(page1, text='--Welcome to Training--', width=85).pack()
Label(page1, text='', width=85).pack()
Label(page1, text='This tutorial will help you familiarize yourself with the program. Following it is key to understanding', width=85).pack()
Label(page1, text='the proper operation of the Laser Cutter.', width=85).pack()
Label(page1, text='', width=90).pack()
Label(page1, text='It is also important to follow every insrtuction exactly as stated, to avoid or minimize damage to the Laser', width=85).pack()
Label(page1, text='Cutter and reduce the risk of injury to the operator and those around him.', width=85).pack()
Label(page1, text='Therefore, all safety notices must be followed with extreme care.', width=110).pack()
Label(page1, text='--Failure to follow all safety notices poses a severe risk of damage to the equipment and to the operator, which can be fatal--', width=110, fg='red').pack()
Label(page1, text='', width=110).pack()
Label(page1, text='', width=110).pack()
Label(page1, text='', width=110).pack()
Label(page1, text='Click Next to Continue...').pack(side = BOTTOM)
page1.pack()
page2 = Frame(wizIntro)
Label(page2, text='', width=110).pack()
Label(page2, text='Notice: Before anyone can operate the Laser Cutter, they must have completed this training program and be authorized as an operator.', width=110).pack()
Label(page2, text='FAILURE TO FOLLOW THIS POLICY MAY RESULT IN IMMEDIATE TERMINATION OF EMPLOYMENT', fg='red').pack()
Label(page2, text='', width=110).pack()
Label(page2, text='Once again, it is very important to follow all safety precautions and notices. Failure to do so can result in one or more of the following:', width=110).pack()
Label(page2, text='*Severe burning', width=110).pack()
Label(page2, text='*Severe damage to, or loss of, fingers', width=110).pack()
Label(page2, text='*Temporary or permanent blindness', width=110).pack()
Label(page2, text='*Minor to Severe damage to the Laser Cutter and/or its components', width=110).pack()
Label(page2, text='', width=110).pack()
Label(page2, text='On the next screen, you will see a list of precautions to follow.', width=110).pack()
Label(page2, text='', width=110).pack()
Label(page2, text='', width=110).pack()
Label(page2, text='...Click Previous to go Back, or Click Next to Continue...').pack(side = BOTTOM)
page2.pack()
page3 = Frame(wizIntro)
Label(page3, text='', width=110).pack()
Label(page3, text='--Safety Precautions--', width=110).pack()
Label(page3, text='', width=110).pack()
Label(page3, text='1. Do not look at the laser tube or at the laser strike-point without proper eyewear or through the glass on the Laser Cutter.', width=110).pack()
Label(page3, text='2. Do not attempt to overide the Door Safety Sensor to allow the laser to cut with the door open.', width=110).pack()
Label(page3, text='3. Keep hands clear of all moving parts and refrain from touching the mirrors with bare hands.', width=110).pack()
Label(page3, text='4. Do not make any adjustments to the laser calibration without proper training and authorization from your superviser.', width=110).pack()
Label(page3, text='5. Do not remove any covers except for the bottom-front (and only to empty the boxes behind said cover) without permission.', width=110).pack()
Label(page3, text='6. Keep a constant awareness and/or watch on the laser as it cuts, and cancel the cut-cycle as soon as problems occur,', width=110).pack()
Label(page3, text='such as fires or when stamps catch on the Laser Head.', width=110).pack()
Label(page3, text='7. Report any problems that will cause the Laser Cutter to not operate properly to your supervisor immediately.', width=110).pack()
Label(page3, text='Above all else, make safety your Highest Priority', width=110, fg='red').pack()
Label(page3, text='', width=110).pack()
Label(page3, text='...Click Previous to go Back, or Click Next to Continue...').pack(side = BOTTOM)
page3.pack()
page4 = Frame(wizIntro)
Label(page4, text='', width=110).pack()
Label(page4, text='...Click Previous to go Back, or Click Next to Continue...').pack(side = BOTTOM)
page4.pack()
#Commands:
pages = [page1, page2, page3, page4]
current = page1
def move(dirn):
nonlocal current
idx = pages.index(current) + dirn
if not 0 <= idx < len(pages):
return
current.pack_forget()
current = pages[idx]
current.pack(side = TOP)
def nex():
move(+1)
def prev():
move(-1)
Button(wizIntro, text='Previous', command=prev).pack(side = LEFT)
Button(wizIntro, text='Next', command=nex).pack(side = RIGHT)
#End Code for the Introduction Wizard