質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Python

    12249questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    10245questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pythonで作ったexeファイルが、初回実行時のみ自動的に再実行されます

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 695

zundarakansu

score 4

pythonで作ったexeファイルが、初回実行時のみ自動的に再起動されます。
はじめにウインドウがでて、数秒間たつと自動的にウインドウが消え、再び立ち上がります。
二回目以降は一回ウインドウが立ち上がると、再び自動で消えることはありません。
pythonがインストールされているパソコンで起こっているみたいです

以下アドベンチャーゲームのメインプログラムです

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


import tkinter
import save_and_load2
import pickle
import pygame
from pygame.locals import *
import sys
import time
import copy
import os.path
pygame.init()



#解読
def decode_line(event):
    global current_line, bgimg, lcharming, ccharming,rcharming,lc,cc,rc
    if current_line >= len(scenario):
        return

    #1行目読み込み
    line = scenario[current_line]
    current_line += 1
    line = line.replace("\\n", "\n").strip()
    params = line.split(" ")
    #分岐
    if line[0] != "#":
        message["text"]=line
        csavedata[0] = current_line
        return
    elif params[0] == "#back":
        canvas.delete("all")
        bgimg = tkinter.PhotoImage(file=params[1])
        canvas.create_image(450, 230, image=bgimg)
        csavedata[4] = params[1]
    elif params[0] == "#putChar":
        if params[2] == "L":
            canvas.delete("left")
            lcharming=tkinter.PhotoImage(file=params[1])
            canvas.create_image(200,160,image=lcharming,tag="left")
            csavedata[1] = params[1]
        elif params[2] == "R":
            canvas.delete("right")
            rcharming=tkinter.PhotoImage(file=params[1])
            canvas.create_image(700,160,image=rcharming,tag="right")
            csavedata[2] = params[1]
        else:
            canvas.delete("center")
            ccharming=tkinter.PhotoImage(file=params[1])
            canvas.create_image(450,160,image=ccharming,tag="center")
            csavedata[3] = params[1]
    elif params[0] == "#delChar":
        if params[1] == "L":
            canvas.delete("left")
            csavedata[1] = None
        elif params[1] == "R":
            canvas.delete("right")
            csavedata[2] = None
        else:
            canvas.delete("center")
            csavedata[3] = None
    elif params[0] == "#branch":
        message.unbind("<Button-1>")
        btn = tkinter.Button(text=params[2], width=20)
        branch.append(btn)
        btn["command"]= lambda : jump_to_line(int(params[1])-1) 
        #lambdaをいれないと引数を指定できない コマンドを受ける関数は引数なしでないといけない。
        btn.place(x=300,y=60+int(params[1])*60)
        jumplabel.append(params[3])
        if params[4] == "n":
            return
    elif params[0] == "#jump":
        label = params[1].strip()
        #ジャンプ先を探す
        for l in range(len(scenario)):
            if scenario[l].strip() == "## " + label:
                current_line = l
                decode_line(None)
                return
    elif params[0] == "#end":
        message["text"] = "終わり"
        message.unbind("<Button-1>")
        pygame.mixer.music.stop()
        current_line = 999999999
    #再帰呼び出し
    decode_line(None)

#ジャンプ関数
def jump_to_line(branchID):
    global current_line
    label = jumplabel[branchID]
    #ボタンむしり
    for btn in branch:
        btn.place_forget() #なくしても動いた
        btn.destroy()
    branch.clear()
    jumplabel.clear()
    message.bind("<Button-1>", decode_line)
    #ジャンプ先を探す
    for l in range(len(scenario)):
        if scenario[l].strip() == "## " + label:
            current_line = l
            decode_line(None)
            return

#ウィンドウ作成
root = tkinter.Tk()
root.title("よろしくアドベンチャー")
root.minsize(900,460)
root.option_add("*font", ["新コミック体", 14])
#キャンパス作成
canvas = tkinter.Canvas(width=900, height=460)
canvas.place(x=0, y=0)
#メッセージエリア
message = tkinter.Label(root,width=83, height=7, wraplength=840, bg="white smoke",
    justify="left", anchor="nw")
message.place(x=28, y=284)
message["text"] = "クリックしてスタート"

#BGM
# pygame.mixer.music.load("bgm\Ro-Crazy.wav")
# pygame.mixer.music.play(-1)

#ファイル読み込み
scenario = []
file = open("img8\scenario.txt","r",encoding="utf-8")
while True:
    line = file.readline()
    scenario.append(line)
    if not line:
        file.close()
        break

#現在の行数
current_line = 0
#イベント設定
message.bind("<Button-1>", decode_line)

if os.path.isfile(".\savedatas.binary") == False:
    savedata = ["","","",""]
    file = open("savedatas.binary","wb")
    pickle.dump(savedata,file)
    file.close
else:
    pass
file = open("savedatas.binary","rb") 
savedata = pickle.load(file)
file.close
csavedata=[0,None,None,None,None]


#LOAD
def doload(i):
    global current_line,bgimg,lcharming,rcharming,ccharming
    file = open("savedatas.binary","rb") 
    savedata = pickle.load(file)
    file.close
    if savedata[i][0] =="":
        pass
    else:
        current_line = savedata[i][0]-1
        canvas.delete("all")
        bgimg = tkinter.PhotoImage(file=savedata[i][4])
        canvas.create_image(450, 230, image=bgimg)
        canvas.delete("left")
        canvas.delete("right")
        canvas.delete("center")
        if savedata[i][1] != None:
            lcharming = tkinter.PhotoImage(file=savedata[i][1])
            canvas.create_image(200,160,image=lcharming,tag="left")
        if savedata[i][2] != None:
            rcharming = tkinter.PhotoImage(file=savedata[i][2])
            canvas.create_image(700,160,image=rcharming,tag="right")
        if savedata[i][3] != None:
            ccharming = tkinter.PhotoImage(file=savedata[i][3])
            canvas.create_image(450,160,image=ccharming,tag="center")
        decode_line(None)



#saveload
dosave = save_and_load2.Save()
Savebtn = tkinter.Button(canvas,text="SAVE")
Savebtn.place(x=760, y=420)
Savebtn["command"] = lambda : dosave.saving(current_line,lcharming,ccharming,rcharming,bgimg,scenario,savedata,csavedata)

#画像
bgimg=None
lcharming=None
ccharming=None
rcharming=None

Loadbtn = tkinter.Button(canvas,text="LOAD")
Loadbtn.place(x=830, y=420)
Loadbtn["command"] = lambda : dosave.loading(savedata,doload)

#選択肢
branch = []
jumplabel = []

root.mainloop()
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • zundarakansu

    2018/02/03 23:09

    --noconsoleをいれたらなおったみたいです。ありがとうございます

    キャンセル

  • umyu

    2018/02/03 23:10

    解決おめでとうございます。回答欄に自己解決内容を記載して質問をクローズしてくださいな。

    キャンセル

  • zundarakansu

    2018/02/03 23:19

    了解です

    キャンセル

回答 1

check解決した方法

+1

exeファイル化するための、pyinstallerのコマンドのとき、
pyinstaller -F --console filename.py
とすることで初回起動時にウインドウが二回立ち上がらなくなりました

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    12249questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    10245questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。