¿Cómo manejar el evento de cerrar ventana en tkinter?

publicado por: Anonymous Tengo una ventana principal y necesito que al oprimir el botón X de cerrar ventana, se pida una confirmación de si desea realmente cerrar la aplicación o hacer otra cosa. ¿Cómo puedo capturar este evento para realizar una determinada acción cuando ocurra? solución Puedes interactuar entre la aplicación y el gestor de…(Continue Reading)

¿Cómo cerrar ventana principal al cerrar ventana secundaria (TopLevel)?

publicado por: Anonymous Tengo una aplicación que abre una ventana principal (Tk()) y después dejo de trabajar en esa ventana principal, la oculto y abro una nueva (TopLevel()), cuando presiono la X que por defecto traen todas las ventanas para cerrarlas (en esa ventana secundaria), me doy cuenta que no se mata el loop de…(Continue Reading)

ValueError: unconverted data remains al convertir una cadena a datetime

publicado por: Anonymous Importo la librería import datetime Consulto y traigo la fecha miFecha.set(BBDDEscuela[6]) c=miFecha Calculo_Dias(c) miConexion.commit() Función para restar las dos fechas def Calculo_Dias(b): a = datetime.datetime.today() f = datetime.datetime.strptime(str(b.get()), ‘%d/%m/%y’) miDias.set((a-f).days) Me aparece este error ValueError: unconverted data remains: 90 b es una StringVar cuyo contenido en este caso es “09/07/1990” solución El…(Continue Reading)

¿Cómo se puede cambiar el color de un texto creado dentro de un canvas en Tkinter/Python?

publicado por: Anonymous Intento hacer una ventana que contiene un canvas donde se puedan cargar imágenes y escribir texto sobre ellas, pero que luego se pueda cambiar interactivamente el color del texto eligiéndolo tal vez de ColorChooser. Pero una vez que se crea el texto no hay manera de cambiarle el color. He intentado con…(Continue Reading)

¿Cómo cerrar la ventana actual?

publicado por: Anonymous Buenas compañeros, quiero hacer algo similar a un cajero automático, mi problema es que cuando quiero cerrar la segunda ventana con withdraw() me dice que no esta definida esa ventana, si la defino abre un cuadro sin nada, parte del código es este. import tkinter as tk from tkinter import messagebox def…(Continue Reading)

Python PIL ImageTkでRuntimeErrorが発生する。

投稿者: Anonymous Tkを使用して、Imageファイルを描画しているのですが、部分テストのために、一部のダイアログのみ描画配置などを確認するため、ソースコードを一部流用していました。 今まで動作していた以下の関数からエラーが発生しました。 def LoadImage(self): self.img_single = self._chk_image_file_(“.\icon\mon_s.gif”) self.img_single = ImageTk.PhotoImage(self.img_single) return エラーの内容 RuntimeError: Too early to create image Exception ignored in: <bound method PhotoImage.__del__ of <PIL.ImageTk.PhotoImage object at 0x0000029C4F87A9E8>> Traceback (most recent call last): File “C:Program Files (x86)Microsoft Visual StudioSharedAnaconda3_64libsite-packagesPILImageTk.py”, line 123, in __del__ name = self.__photo.name AttributeError: ‘PhotoImage’ object has no attribute…(Continue Reading)

Mac上のPythonでturtleモジュールのインポートができない

投稿者: Anonymous Mac(El capitan)に標準インストールされているpython2.7.11で、 import turtle がエラーになります。以前はインポートできていたのですが、エラーが出てしまいます。これを解決するため、アドバイスをいただけないでしょうか。2016年3月時点ではturtleモジュールをインポートして、動かすことはできていました。宜しくお願いします 以下が、シェルでの実行結果です >>> import turtle #インポート Traceback (most recent call last): File “<stdin>”, line 1, in <module> File “/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/turtle.py”, line 107, in <module> import Tkinter as TK File “/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py”, line 39, in <module> import _tkinter # If this fails your Python may not be configured for Tk ImportError: No…(Continue Reading)

Python: Usando label en Tkinter

publicado por: Anonymous para un programa quiero colocar dos label “Question” y “Answer” al lado de dos cuadro de texto. Como se muestra en la siguiente imagen: El problema es que con el siguiente código: from tkinter import * #Creando una ventanta principal window=Tk() window.geometry(“500×300+100+100”) window.title(“Question Editor”) #Creando un campo de texto para question Entryquestion=StringVar()…(Continue Reading)

Eliminar una linea de un txt en python por la posición que este ocupa dentro del txt y no por el contenido

publicado por: Anonymous Supongamos que tenemos el siguiente txt Entonces, lo que deseo es realizar una aplicación que yo pueda borrar mediante la ejecución de un botón y un text box la línea que contenga cierta pocisión dentro del txt. Para que se entienda en el text box yo declararía la posicion de la línea,…(Continue Reading)

PyInstallerで–noconsoleオプション指定時に作成される.appファイルが起動しない

投稿者: Anonymous pyinstallerコマンドでbmi.py(Tkinterを利用してbmiの計算するGUIを表示するファイル)を単一実行ファイル化することはできたのですが、distフォルダ下のbmi.appファイルをダブルクリックしても一瞬Dockにアイコンが表示されて、すぐに消えてしまいます。 pyinstallerのコマンド pyinstaller bmi.py –onefile –noconsole bmi.py import tkinter as tk def calc_bmi(): h = float(textHeight.get()) / 100 w = float(textWeight.get()) bmi = w / h ** 2 rw = h ** 2 * 22 per = int(w / rw * 100) – 100 s = "肥満 {0}% (bmi={1})".format(per, bmi) labelResult[‘text’] = s…(Continue Reading)

Fecha actualizada en Tkinter

publicado por: Anonymous Quiero hacer un contador en Tkinter poco a poco. De momento quiero que me muestre la fecha en segundos (si, sé que es un poco raro…) através de esta función: def Date_secondsnow(): now = datetime.now() Datesecondsnow = now.second + now.minute*60 + now.hour*60*60 + now.day*24*60*60 + now.month*30*24*60*60 + now.year*365*24*60*60 return Datesecondsnow La función…(Continue Reading)

tkinterで選択した要素を返してリストを作りたい

投稿者: Anonymous tkinter初心者です。tkinterのリストボックスから要素(項目)を選んで、選んだものだけを新しいリストとして作成したいと思っています。 以下のコードはあるサイトから引用しましたが、これに加えて上記で挙げた方法を行いたいと思っております。 from tkinter import * from tkinter import ttk #—————————————- #リストボックスを押した時の反応用関数 def select_lb(event): for i in lb.curselection(): print(str(i)+”番目を選択中”) print(“”) #—————————————- tki = Tk() tki.title(‘test’) #—————————————- #リストボックス listarray = (‘項目1’, ‘項目2’, ‘項目3’, ‘項目4’, ‘項目5’, ‘項目6’, ‘項目7’, ‘項目8’, ‘項目9’) txt = StringVar(value=listarray) lb= Listbox(tki, listvariable=txt,width=50,height=10) lb.bind(‘<<ListboxSelect>>’, select_lb) lb.grid(row=0, column=1) lb.configure(selectmode=”extended”) #—————————————- #—————————————- #スクロールバー scrollbar…(Continue Reading)

Error en query parametrizada: TypeError: list indices must be integers, not str

publicado por: Anonymous Estoy desarrollando una GUI que maneja mi base de datos en Python 2.7 que se conecta a una base de datos MySQL. Ya puede insertar, consultar y borrar pero lo que aun no puede hacer es actualizar con la sentencia UPDATE. Me aparece el siguiente error: Exception in Tkinter callback Traceback (most…(Continue Reading)

Canvasの画像に対して、画像差し替えと場所移動を同時に行いたい

投稿者: Anonymous 画像が変化しながら画像の表示座標を移動する、といった機能があるプログラムを作っているのですが、実行するとたまにラグっているように見えることがあります。 import tkinter as tk class App(object): def GUI(self): root=tk.Tk() root.geometry(“600×600″) self.pic001=tk.PhotoImage(file=”picture001.png”) self.pic002=tk.PhotoImage(file=”picture002.png”) self.canvas = tk.Canvas(bg=”black”, width=796, height=816) self.canvas.place(x=0, y=0) self.item=self.canvas.create_image(0, 0, image=self.pic001, anchor=tk.NW) self.canvas.move(self.item,-51,10) self.canvas.itemconfig(self.item, image = self.pic002) root.mainloop() app=App() app.GUI() 基本的にはこれで実行しても問題はないのですが しかしこのコードをもっと正確に言えば、画像表示位置を変えた後に画像を差し替える という事になります。 そのため、処理が重くなる?と画像表示が思うようにいかず、ラグっているように見えるのだと思います。 この問題を解決するには、画像差し替えと座標移動を同時に行う必要性があると思うのですが、どうすればそれを成すことができるでしょうか? 一応今のところ、プログラムはこんな感じにラグっています 解決 それは「モーフィング」と呼ばれる技術でしょう。 あまりtkinterだけで出来るとは思えないのですが。 むしろ動画作成・編集ソフトの範疇と考えられます。 「動画作成 モーフィング」で検索すると、こんなのが関連しそうです。 PythonならOpenCVとかを使うようにすれば出来るのでは? OpenCVで顔のモーフィングを実装する Face Morph Using OpenCV — C++ /…(Continue Reading)

Tkinter でボタンが押されたときに別のオブジェクトの表示を変更したい

投稿者: Anonymous tkinterでGUI画面を作成しており、Frameによりオブジェクトを分けて実装しています。 その一部の内部ボタンを押すと、別のFrameの表示を変更しようとしています。 下記のコードのように、呼び出し元自体をFrameオブジェクトに渡してしまえば、呼び出し元のメソッドを通じて別のFrameに変更を加えられます。 もっとスマートな書き方はないでしょうか? from tkinter import * class class_Main(): def __init__(self): self.mode = 0 self.root = Tk() self.iTopFrame = class_TopFrame(self,self.root) self.iMainFrame = class_MainFrame(self,self.root) def run(self): self.root.mainloop() def TopClicked(self): self.mode = 1-self.mode self.iMainFrame.set_widget(self.mode) pass class class_TopFrame(): def __init__(self,parent,root): _InFrame_ = Frame(root) self.Button = Button(_InFrame_,text=’change’,command=parent.TopClicked) self.Button.grid() _InFrame_.grid() class class_MainFrame(): def __init__(self,parent,root): _InFrame_ = Frame(root)…(Continue Reading)

地色が透明なCanvasを作成したい。

投稿者: Anonymous 問題点 今tkinterのCanvasを使ってゲームを作っています。 しかし1つ問題があり、canvasではオブジェクト同士が重なると、新しく作成されたオブジェクトのほうが上の様に来るようになります。 例えば、ゲーム内の画面では、背景の上にキャラクターが来て、キャラクターの前に手前側オブジェクトが来る、といった仕組みになっているのでこれを作成しようと思えば・・・ canvas=tk.Cancas….. ゲームの背景=canvas.create_image….. キャラクター=canvas.create_image….. 手前側オブジェクト=canvas.create_image….. といった順番で作成されます。 しかし、ゲーム中で新しいキャラクターを登場させることになれば、それは手前側オブジェクトよりも新しく作成されることになるので、その新しいキャラクターとオブジェクトが重なったら、キャラクターが手前側に来てしまいます。 つまり、 手前側オブジェクト=canvas.create_image….. の後で キャラクター2=canvas.create_image….. をすると、キャラクター2が手前側オブジェクトの前に来てしまう。 考えてみた対策方法 そこでこの問題を解決するには、1つのCanvas上に画像を生成するのではなく、ゲーム背景専用、キャラークター専用そして手前側オブジェクト専用のCanvasを作成して、Canvasを重ね合わせて、それぞれのオブジェクト(ゲーム背景、キャラクター、オブジェクト)をそれぞれの対応するCanvas(ゲーム背景専用、キャラークター専用そして手前側オブジェクト専用)で作成すれば問題は解決できると思うんです。 Back_Ground_Layer=tk.Cancas….. Character_Layer=tk.Cancas….. Object_Layer=tk.Cancas….. ゲームの背景=Back_Ground_Layer.create_image….. キャラクター=Character_Layer.create_image….. 手前側オブジェクト=Object_Layer.create_image….. つまり、1つのCanvasの上にすべての画像を作成しようとすると、新しいもの順に表示されてしまうけど それぞれのCanvasで新しい画像を生成しても、その上にはほかのCanvasがあるからしっかりと期待した順番に表示される という感じになると思うんです。 しかしそこで他の問題がありまして・・・ 実は、Canvasを作成するときには、Canvasの地色も設定しないといけないのですが、この地色が問題なのです。 地色を透明に出来れば、下に来るCanvasのアイテムも見れるようになるのですが、透明になれなければ下のCanvasを覆いかぶさなってしまいます。 そこで、Canvasの地色を透明にする方法を探しているのですが・・・どうすればいいでしょうか? また、他の解決方法などはありますでしょうか? 解決 近そうなものを見つけたので先頭に追記 Canvasのバックグラウンドカラーを 0 (無効な色?) に設定するらしいです。 How to make a tkinter canvas background transparent? The only possible config(… option, to set the background…(Continue Reading)

¿Cómo puedo cambiar entre dos ventanas con Tkinter sin usar clases ni frames?

publicado por: Anonymous Actualmente tengo dos scripts en python, y necesito abrir desde uno el a través de un botón, pero además pasando parámetros, he intentado hacerlo con clases o frases, pero no me ha resultado. Script 1: Menu from tkinter import * main = Tk() # Limpiar registros con botonLimpiar def valoresLimpiar(*args): varDes.set(‘Seleccionar…’) varModo.set(‘Seleccionar…’)…(Continue Reading)

DIbujar grafico en Canvas. Tkinter, Python 3.6

publicado por: Anonymous Hola buenas tengo un problema a la hora de representar unos gráficos, estoy usando Python, concretamente la librería Tkinter. Dispongo de una serie de datos en un archivo excel que exporto con python a un dataframe: file = pd.read_excel(‘Usuarios.xlsx’) df = pd.DataFrame(file) Ahora con esos datos me gustaría extraer varios gráficos (barras,…(Continue Reading)

En Tkinter/Python 2.x ¿Cómo mover una imagen dentro de un canvas con el puntero del ratón?

publicado por: Anonymous Lo que necesito saber es cómo puedo cargar una imagen cualquiera de mi PC dentro de un canvas. Luego, hacer clic sobre ella (tal vez que se resalte con algún color como “red” no importa si no es posible resaltarla) y al hacer clic con el ratón poder arrastrar dicha imagen a…(Continue Reading)

Tkinter, seguir utilizando programa mientras se ejecuta un while

publicado por: Anonymous Buenas Tardes, Hago un programa donde se toman dos fechas por parte del usuario y luego una comparación con un While, me gustaría seguir utilizando el programa mientras el While se ejecuta, existe alguna forma ? def callback(): var=OpenHour.get() var1=CloseHour.get() actual = 0 if not validateDate(var, var1): tkMessageBox.showinfo(“Error”,”Datos o formato incorrecto, deberia…(Continue Reading)

¿Cómo seleccionar un elemento por defecto en Listbox Tkinter?

publicado por: Anonymous He creado un Listbox en Tkinter y quiero un elemento esté seleccionado por defecto, no solo que tenga el foco, sino que esté seleccionado. He probado con .selection_set(0) y lo resalta, no lo selecciona. Al cambiar a otro widget ya no aparece el elemento resaltado. He visto la posibilidad de añadir el…(Continue Reading)

Tkinterでのラベルの更新

投稿者: Anonymous ラベルの更新をしたいのですが、1つの関数で2回更新したいのですがsleepのような時間の要する関数を使ってもラベルのテキストは更新されないのです。それは、mainloopの最後に到達したときに更新されるからかなと考えたのですが、更新させる方法はありますでしょうか? 以下のコードは直面した問題を抽象化したものです。sleepは時間のかかる処理とでも置き換えてください。実際にこのコードを実行すると、この問題に直面すると思います。 from Tkinter import * import time class Window: def __init__(self): self.flg = False self.root = Tk() self.txt = StringVar() Button(self.root, text=”test”, command=self.changeLabel).pack() self.txt.set(“hoge”) Label(self.root, textvariable=self.txt).pack() def changeLabel(self): self.txt.set(“hogehoge”) time.sleep(2) # sleepのような時間のかかる処理がしたい self.txt.set(“hogehogehoge”) if __name__ == ‘__main__’: w = Window() w.root.mainloop() よろしくお願いします。 解決 スレッドを分けるのが適切と思います。 from Tkinter import * import threading from time…(Continue Reading)

Pylinac の Picket Fence モジュールでファイル選択時にエラーが発生する

投稿者: Anonymous PythonのGUIを作成中です。 画像ファイルを選択し、PicketFenceというモジュールで解析したいと考えています。 import tkinter from tkinter import filedialog from pylinac import PicketFence #ボタンがクリックされたら実行 def file_select(): idir = r"C:UserstanimOneDriveデスクトップ" #初期フォルダ filetype = [("DICOM","*.dcm"), ("ZIP","*.zip"), ("すべて","*")] #拡張子の選択 file_path = tkinter.filedialog.askopenfilename(filetypes = filetype, initialdir = idir) input_box.insert(tkinter.END, file_path) #結果を表示 pf_img = PicketFence(file_path()) pf = PicketFence(pf_img) pf.analyze(tolerance=0.15, action_tolerance=0.03) print(pf.results()) pf.plot_analyzed_image() pf.publish_pdf(‘mypf.pdf’) #ウインドウの作成 root = tkinter.Tk() root.title("Python GUI")…(Continue Reading)

Python ttk.Treeview python3.7でリストに割り当てたtagに対して色を設定する方法

投稿者: Anonymous ttk.Treeview に表示したリストに、見やすいように偶数/奇数行でbackground色を変更したり、特定の条件のときにグレーハッチするような動作をさせていました。 新しく開発環境を構築した際、インストーラの公開の関係上、Python3.7を導入しました。 Python3.6では正常にbackground色を変更できます。 Python3.7ではbackground色を変更できません 同じソースコードで、Python3.6とPython3.7で挙動が異なります。 以下にミニマムなソースを示します。 Python3.7以降で正常にリストを色分けするにどのようにしたらよいのでしょうか? import tkinter as tk from tkinter import ttk if __name__ == ‘__main__’: obj = ttk.tkinter.Tk() tree = ttk.Treeview( obj, show = “headings”, ) tree_item = { “No.”:40, “Name”:80, } tree[“columns”]=tuple(range(1,len(tree_item)+1)) for i, item in enumerate(tree_item.items()): name, width = item tree.heading(i+1,text=name) tree.column(i+1,minwidth = width, width =…(Continue Reading)

Tkinter (python) Variable vacía

publicado por: Anonymous Al executar el siguiente código: from Tkinter import * def RegistrarP(): def GuardarP(): print (“Eres una ” + svnombreRP.get()) ventanaRP = Tk() ventanaRP.geometry(“600×600+720+320”) ventanaRP.title(“StackBlueD”) svnombreRP = StringVar() nombreRP = Label (ventanaRP,text=”Nombre Perfil”).place(x=10,y=30) ctnombreRP = Entry(ventanaRP,textvariable=svnombreRP).place(x=150,y=30) guardarRP = Button(ventanaRP, text=”Guardar Perfil”, command = GuardarP).place(x=400,y=200) ventanaRP.mainloop() ventana = Tk() ventana.geometry(“600×600+700+300”) ventana.title(“StackBlueD”) cargarP = Button(ventana,…(Continue Reading)

Modificar una variable global desde una función

publicado por: Anonymous Tengo un problema. Anteriormente me ayudaron a solucionar un problema con unas funciones; fue muy útil, arreglé ese problema pero llegué a otro, por supuesto jaja. Para dar un valor al terminar la aplicación (cuestiones de la función de la app) necesito darle un valor a n desde dentro de la función,…(Continue Reading)

Como mostrar un dataframe en tkinter

publicado por: Anonymous soy novato en esto de las interfaces graficas, estoy elaborando un programa bastante rudimentario. Lo que necesito es imprimir un dataframe en el recuadro señalado en la imagen, este no tiene porque ser un cuadro de texto (ya he dicho que tengo bastante poca idea). De momento el codigo que tengo es…(Continue Reading)

Insertar salto de línea escribiendo en un txt (Python)

publicado por: Anonymous Como puedo insertar un salto de línea : archi.write(svnombreRP.get()) Lo hago de la siguientes maneras y no me funciona: No funciona archi.write(svnombreRP.get()’/n’) No funciona archi.write(svnombreRP.get()/n) No funciona, me imprime la variable y /n seguido archi.write(svnombreRP.get()+’n’) No funciona archi.write(svnombreRP.get()+/n) solución El Carácter de escape para un salto de línea es n que sería…(Continue Reading)