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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

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

Python

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

Q&A

解決済

1回答

3463閲覧

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

zundarakansu

総合スコア12

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/02/03 12:04

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

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

python3.6

1 2#!/usr/bin/env python3 3# -*- coding: utf-8 -*- 4 5 6import tkinter 7import save_and_load2 8import pickle 9import pygame 10from pygame.locals import * 11import sys 12import time 13import copy 14import os.path 15pygame.init() 16 17 18 19#解読 20def decode_line(event): 21 global current_line, bgimg, lcharming, ccharming,rcharming,lc,cc,rc 22 if current_line >= len(scenario): 23 return 24 25 #1行目読み込み 26 line = scenario[current_line] 27 current_line += 1 28 line = line.replace("\n", "\n").strip() 29 params = line.split(" ") 30 #分岐 31 if line[0] != "#": 32 message["text"]=line 33 csavedata[0] = current_line 34 return 35 elif params[0] == "#back": 36 canvas.delete("all") 37 bgimg = tkinter.PhotoImage(file=params[1]) 38 canvas.create_image(450, 230, image=bgimg) 39 csavedata[4] = params[1] 40 elif params[0] == "#putChar": 41 if params[2] == "L": 42 canvas.delete("left") 43 lcharming=tkinter.PhotoImage(file=params[1]) 44 canvas.create_image(200,160,image=lcharming,tag="left") 45 csavedata[1] = params[1] 46 elif params[2] == "R": 47 canvas.delete("right") 48 rcharming=tkinter.PhotoImage(file=params[1]) 49 canvas.create_image(700,160,image=rcharming,tag="right") 50 csavedata[2] = params[1] 51 else: 52 canvas.delete("center") 53 ccharming=tkinter.PhotoImage(file=params[1]) 54 canvas.create_image(450,160,image=ccharming,tag="center") 55 csavedata[3] = params[1] 56 elif params[0] == "#delChar": 57 if params[1] == "L": 58 canvas.delete("left") 59 csavedata[1] = None 60 elif params[1] == "R": 61 canvas.delete("right") 62 csavedata[2] = None 63 else: 64 canvas.delete("center") 65 csavedata[3] = None 66 elif params[0] == "#branch": 67 message.unbind("<Button-1>") 68 btn = tkinter.Button(text=params[2], width=20) 69 branch.append(btn) 70 btn["command"]= lambda : jump_to_line(int(params[1])-1) 71 #lambdaをいれないと引数を指定できない コマンドを受ける関数は引数なしでないといけない。 72 btn.place(x=300,y=60+int(params[1])*60) 73 jumplabel.append(params[3]) 74 if params[4] == "n": 75 return 76 elif params[0] == "#jump": 77 label = params[1].strip() 78 #ジャンプ先を探す 79 for l in range(len(scenario)): 80 if scenario[l].strip() == "## " + label: 81 current_line = l 82 decode_line(None) 83 return 84 elif params[0] == "#end": 85 message["text"] = "終わり" 86 message.unbind("<Button-1>") 87 pygame.mixer.music.stop() 88 current_line = 999999999 89 #再帰呼び出し 90 decode_line(None) 91 92#ジャンプ関数 93def jump_to_line(branchID): 94 global current_line 95 label = jumplabel[branchID] 96 #ボタンむしり 97 for btn in branch: 98 btn.place_forget() #なくしても動いた 99 btn.destroy() 100 branch.clear() 101 jumplabel.clear() 102 message.bind("<Button-1>", decode_line) 103 #ジャンプ先を探す 104 for l in range(len(scenario)): 105 if scenario[l].strip() == "## " + label: 106 current_line = l 107 decode_line(None) 108 return 109 110#ウィンドウ作成 111root = tkinter.Tk() 112root.title("よろしくアドベンチャー") 113root.minsize(900,460) 114root.option_add("*font", ["新コミック体", 14]) 115#キャンパス作成 116canvas = tkinter.Canvas(width=900, height=460) 117canvas.place(x=0, y=0) 118#メッセージエリア 119message = tkinter.Label(root,width=83, height=7, wraplength=840, bg="white smoke", 120 justify="left", anchor="nw") 121message.place(x=28, y=284) 122message["text"] = "クリックしてスタート" 123 124#BGM 125# pygame.mixer.music.load("bgm\Ro-Crazy.wav") 126# pygame.mixer.music.play(-1) 127 128#ファイル読み込み 129scenario = [] 130file = open("img8\scenario.txt","r",encoding="utf-8") 131while True: 132 line = file.readline() 133 scenario.append(line) 134 if not line: 135 file.close() 136 break 137 138#現在の行数 139current_line = 0 140#イベント設定 141message.bind("<Button-1>", decode_line) 142 143if os.path.isfile(".\savedatas.binary") == False: 144 savedata = ["","","",""] 145 file = open("savedatas.binary","wb") 146 pickle.dump(savedata,file) 147 file.close 148else: 149 pass 150file = open("savedatas.binary","rb") 151savedata = pickle.load(file) 152file.close 153csavedata=[0,None,None,None,None] 154 155 156#LOAD 157def doload(i): 158 global current_line,bgimg,lcharming,rcharming,ccharming 159 file = open("savedatas.binary","rb") 160 savedata = pickle.load(file) 161 file.close 162 if savedata[i][0] =="": 163 pass 164 else: 165 current_line = savedata[i][0]-1 166 canvas.delete("all") 167 bgimg = tkinter.PhotoImage(file=savedata[i][4]) 168 canvas.create_image(450, 230, image=bgimg) 169 canvas.delete("left") 170 canvas.delete("right") 171 canvas.delete("center") 172 if savedata[i][1] != None: 173 lcharming = tkinter.PhotoImage(file=savedata[i][1]) 174 canvas.create_image(200,160,image=lcharming,tag="left") 175 if savedata[i][2] != None: 176 rcharming = tkinter.PhotoImage(file=savedata[i][2]) 177 canvas.create_image(700,160,image=rcharming,tag="right") 178 if savedata[i][3] != None: 179 ccharming = tkinter.PhotoImage(file=savedata[i][3]) 180 canvas.create_image(450,160,image=ccharming,tag="center") 181 decode_line(None) 182 183 184 185#saveload 186dosave = save_and_load2.Save() 187Savebtn = tkinter.Button(canvas,text="SAVE") 188Savebtn.place(x=760, y=420) 189Savebtn["command"] = lambda : dosave.saving(current_line,lcharming,ccharming,rcharming,bgimg,scenario,savedata,csavedata) 190 191#画像 192bgimg=None 193lcharming=None 194ccharming=None 195rcharming=None 196 197Loadbtn = tkinter.Button(canvas,text="LOAD") 198Loadbtn.place(x=830, y=420) 199Loadbtn["command"] = lambda : dosave.loading(savedata,doload) 200 201#選択肢 202branch = [] 203jumplabel = [] 204 205root.mainloop()

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umyu

2018/02/03 12:32

>pythonで作ったexeファイル exeファイルを作成時に使用したライブラリ名とコマンドオプション指定を質問文に追記してくださいな。 憶測では、exe化した時のオプション指定で「コンソールを表示しないようにする」を指定していない気がしますが。。。
zundarakansu

2018/02/03 14:00

exeファイルはpyInstallerで作りました。そのときは、  pyinstaller -F filename.py です
umyu

2018/02/03 14:03

pyinstaller --noconsole -F filename.py としてみてくださいな。あとsave_and_load2がないため、質問文のコードは実行できませんでした!
zundarakansu

2018/02/03 14:09

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

2018/02/03 14:10

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

回答1

0

自己解決

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

投稿2018/02/03 14:21

zundarakansu

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問