I'm practicing with an algorithm that generates a random number that the user needs, then keeps trying until it hits. But PySimpleGUI produces an error saying: Unable to complete operation on element with key None.
import randomimport PySimpleGUI as sg
class ChuteONumero:
def init(self):
self.valor_aleatorio = 0
self.valor_minimo = 1
self.valor_maximo = 100
self.tentar_novamente = True
def Iniciar(self):
# Layout
layout = [
[sg.Text('Seu chute', size=(39, 0))],
[sg.Input(size=(18, 0), key='ValorChute')],
[sg.Button('Chutar!')],
[sg.Output(size=(39, 10))]
]
# Criar uma janela
self.janela = sg.Window('Chute o numero!', Layout=layout)
self.GerarNumeroAleatorio()
try:
while True:
# Receber valores
self.evento, self.valores = self.janela.Read()
# Fazer alguma coisa com os vaalores
if self.evento == 'Chutar!':
self.valor_do_chute = self.valores['ValorChute']
while self.tentar_novamente == True:
if int(self.valor_do_chute) > self.valor_aleatorio:
print('Chute um valor mais baixo')
break
elif int(self.valor_do_chute) < self.valor_aleatorio:
print('Chute um valor mais alto!')
break
if int(self.valor_do_chute) == self.valor_aleatorio:
self.tentar_novamente = False
print('Parabéns, você acertou!')
break
except:
print('Não foi compreendido, apenas digite numeros de 1 a 100')
self.Iniciar()
def GerarNumeroAleatorio(self):
self.valor_aleatorio = random.randint(
self.valor_minimo, self.valor_maximo)
chute = ChuteONumero()
chute.Iniciar()
I expected a layout to open, but it does not open.
Revised your code ...
import random
import PySimpleGUI as sg
class ChuteONumero:
def __init__(self):
self.valor_aleatorio = 0
self.valor_minimo = 1
self.valor_maximo = 100
self.tentar_novamente = True
def Iniciar(self):
# Layout
layout = [
[sg.Text('Your kick', size=(39, 0))],
[sg.Input(size=(18, 0), key='ValorChute')],
[sg.Button('Kick!')],
[sg.Output(size=(39, 10))]
]
# Create a window
self.janela = sg.Window('Guess The Number!', layout)
self.GerarNumeroAleatorio()
while True:
# Receive amounts
evento, valores = self.janela.read()
if evento == sg.WIN_CLOSED:
break
# Do something with the values
elif evento == 'Kick!':
try:
valor_do_chute = int(valores['ValorChute'])
except ValueError:
print('Not understood, just type numbers from 1 to 100')
continue
if valor_do_chute > self.valor_aleatorio:
print('Guess a lower value')
elif valor_do_chute < self.valor_aleatorio:
print('Kick a higher value!')
if valor_do_chute == self.valor_aleatorio:
sg.popup_ok('Congratulations, you got it right!')
break
self.janela.close()
def GerarNumeroAleatorio(self):
self.valor_aleatorio = random.randint(self.valor_minimo, self.valor_maximo)
chute = ChuteONumero()
chute.Iniciar()
Related
While creating a tkinter GUI application, I created a window with a button to close the program and terminate the script, but when I used it, the program did close but the script was still running in the background and I was unable to start the program again.
I have tried several different functions to close the program, but nothing has worked. Here are some of my attempts:
def Cerrar():
summary.destroy()
No = customtkinter.CTkButton(summary, text="Cerrar", command=Cerrar,width=10)
or
No = customtkinter.CTkButton(summary, text="Cerrar", command=lambda:Cerrar(),width=10)
or
No = customtkinter.CTkButton(summary, text="Cerrar", command=lambda:summary.destroy(),width=10)
here is the window im having a problem with:
def Analisis():
global resumen,cuantia,summary,refuerzo
Denom_Malla = "{}-{}".format(Malla.get(),Separacion.get())
denominacion_mallas = ["4-25","4-20","4-15","4.5-15","5-15","5.5-15",
"6-15","6.5-15","7-15","7.5-15","8-15","8.5-15",
"4-12.5","4-10","4-7.5","4.5-7.5","5-7.5","5.5-7.5",
"6-7.5","6.5-7.5","7-7.5","7.5-7.5","8-7.5","8.5-7.5"]
if Denom_Malla in denominacion_mallas:
fc = int(Fc.get())
fy_malla = int(Fy_Malla.get())
fy_barra = int(Fy_Barra.get())
mu = float(Mu.get())
H = float(h.get())
Rec = float(rec.get())
malla = Malla.get()
separacion = Separacion.get()
denom_barra = int(Denom_Barra.get())
resumen, cuantia_calculada, d, Rn, cuantia_min, cuantia_diseño, As,Sep_Barra = Calculo_Losa(fc, fy_malla, fy_barra, mu, H, Rec, malla, separacion, denom_barra)
root.destroy()
if resumen == None:
root_losas(lista_fc.index(str(fc)),lista_fy.index(str(fy_malla)),lista_fy.index(str(fy_barra)),lista_mallas.index(malla),lista_denombarra.index(str(denom_barra)),mu,H,Rec,lista_separacion.index(str(separacion)))
else:
summary = customtkinter.CTk()
summary.title("Resumen")
summary.minsize(width=300,height=150)
customtkinter.CTkLabel(summary, text="Momento Último calculado es de: {} KN-m".format(mu)).grid(row=0,column=0,columnspan=2)
customtkinter.CTkLabel(summary, text="La cuantía calculada es de: {}".format(round(cuantia_diseño,4))).grid(row=1,column=0,columnspan=2)
customtkinter.CTkLabel(summary, text="Para la losa se necesita una malla {}".format(resumen)).grid(row=2,column=0,columnspan=2)
customtkinter.CTkLabel(summary, text="Desea realizar otro análisis?").grid(row=3,column=0,columnspan=2)
customtkinter.CTkLabel(summary, text="En que tipo de refuerzo desea guardar: ").grid(row=2,column=3)
refuerzo = customtkinter.StringVar(value=lista_refuerzo[0])
refuerzo_Box = customtkinter.CTkOptionMenu(summary, variable=refuerzo, values=lista_refuerzo, width=100)
refuerzo_Box.grid(row=3,column=3,padx=15)
refuerzo_Box.configure(cursor="hand2")
Yes = customtkinter.CTkButton(summary, text="Analizar", command=lambda:Siguiente(fc,fy_malla,fy_barra,malla,denom_barra,mu,H,Rec,separacion),width=10)
Yes.grid(row=4,column=0)
Yes.configure(cursor="hand2")
Guardar = customtkinter.CTkButton(summary, text="Guardar", command=lambda:Save(fc,fy_malla,mu,1,H,Rec,d,Rn,cuantia_calculada,cuantia_min,cuantia_diseño,As,malla,separacion,denom_barra,Sep_Barra,resumen))
Guardar.grid(row=4,column=3,pady=15)
Guardar.configure(cursor="hand2")
No = customtkinter.CTkButton(summary, text="Cerrar", command=Cerrar,width=10)
No.grid(row=4,column=1)
No.configure(cursor="hand2")
summary.mainloop()
else:
tk.messagebox.showerror(title="Error Malla", message="La denominacion de la malla elegida no está registrada.")
`
I am creating a bot to automate an activy at the game "Monster Sanctuary", but i'm having a problem where my pyautogui is recognizing another image as the one I input as argument, cause all of the things in screen looks the same!
Image, to undestand better what I am saying:
The one that I am trying to make my pyautogui locate is the "Sino de Monstro".
Here is the specifc part of code used to do that:
while time.time() - start < 2:
if pyautogui.locateOnScreen('Images-PTBR\\Screenshot_1.png') != None:
Sino = True
print("Achei!")
if Sino == True:
start = 2
else:
print('Ainda localizando...')
if Sino == True:
m_x, m_y = pyautogui.locateCenterOnScreen('Images-PTBR\\Screenshot_1.png')
pyautogui.click(m_x, m_y)
print("Sino de monstro alcançado.")
# Tem um problema, se estiver na outra página o sino, ele dá dois enters e quebra tudo.
while contador_2 != 2:
pyautogui.press('enter')
time.sleep(0.2)
contador_2 += 1
else:
No_Sino = True
this issue appear when I put promedios[x] = float(punteos / 3), if suppose to x is in for outside have a int value like possition. I modified the code with the new changes
def alumno(nombre, apellido):
print('Nombre: ', nombre, 'Apellido: ', apellido)
def promedio(a,b,c):
promedio1 = int(a+b+c)/3
#return promedio1
print(promedio1)
nombre = input('ingrese nombre: ')
apellido = input('ingrese apellido: ')
alumno(nombre,apellido)
print()
#promedio(1,2,3)
print('Ingrese los punteos de las Materias:')
punteo = 0
materias = 5
for x in range(0, materias):
punteos = 0
notas = 3
promedio1 = 0
promedios = []
xx = 1
for y in range(0, notas):
punteo = int(input("Ingrese punteo de la Materia "+str(x+1)+" punteo "+str(y+1)+": "))
punteos = int(punteos + punteo)
promedio1 = float(punteos/3)
promedios.append(promedio1)
print('El promedio de la materia ',x+1,' es ',promedio1)
print(promedios[x])
As long as you have done promedios = 0 and no longer modify the variable promedios before the line of code promedios[x] = float(punteos / 3), promedios is an int at that line.
However, doing promedios[x] = ... calls the __setitem__ method of variable promedios, which is of type int and of course does not support such item assignment.
Types like list, dict support item assignment, by the way.
You need to start with an empty list:
promedios = []
And then append to it:
promedios.append(float(punteos / 3))
I am getting Rollbacks automatically.
Here is my code:
#socketio.on('update2')
def update_table_infocorp(trigger):
checknotprocess = Infocorp.query.filter(Infocorp.Procesado == False)
for row in checknotprocess:
getidentityuser = Usuarios.query.filter(Usuarios.id_user == row.id_user).first()
getidentityconsulta = Consolidado.query.filter(Consolidado.id_user == row.id_user and
(Consolidado.numdocumento == getidentityuser.numdocumento)).first()
if not getidentityconsulta:
# print("No se encontro la consulta relacionada al usuario.")
test = True
else:
sentinelresult = getsentinel(getidentityuser.tipodocumento, getidentityuser.numdocumento, row.id_consulta,
getidentityconsulta.solicitudes_id)
print(getidentityconsulta.solicitudes_id)
print(getidentityuser.tipodocumento)
if sentinelresult == True:
continue
else:
print("Ocurrio un error")
resultadoquery = Infocorp.query.filter(Infocorp.Procesado == True)
datatransform = InfocorpSchema(many=True)
datatransformresult = datatransform.dump(resultadoquery)
emit('nuevatableinfocorp', datatransformresult, broadcast=True)
And those are my logs:
I hope you will be able to help me because it is affecting other systems that use the same database.
Hi i'm pretty new with python and kivy , im trying to do a simple "to do" app.. My code looks horrible, i know, and im sorry for that..
I have a table in sqlite3 with some information stored in it. I would like to call a function that query this table on app start up. I can't figure out how to make it work.. Here is my code
Python:
import sqlite3
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.togglebutton import ToggleButton
from kivy.clock import Clock
from kivy.uix.floatlayout import FloatLayout
from functools import partial
class GetLinksButton(Button):
def get_caption(self):
# DEFINIZIONE CHE SI POTREBBE FARE IN KV .. CREAZIONE POPUP CON 2 BOTTONI E TEXTINPUT
content = BoxLayout(orientation='vertical')
txt = TextInput(text = "",focus=False,multiline=False,size_hint=(1,0.2),font_size= 40)
content.add_widget(txt)
mybutton = Button(text='Add',size_hint=(1,0.2),font_size=20)
mybutton2 = Button(text='Close',size_hint=(1,0.2),font_size=20)
content.add_widget(mybutton)
content.add_widget(mybutton2)
mypopup = Popup(title = 'Add item to list',
content = content,
size_hint = (1, 0.4),
auto_dismiss = False,
).open()
def saveTxt(tt):
mypopup.dismiss() # FUNZIONE CHIAMATA, CHIUSURA POPUP
try:
self.set_caption(txt.text) # CHIAMA FUNZIONE DI CREAZIONE BOTTONE CON ARG IL CAPTURE DEL TESTO IN TEXTBOX
except:
pass
mybutton.bind(on_press = saveTxt) # CHIAMA FUNZIONE DI CAPTURE DEL TESTO E CHIUSURA POPUP
txt.bind(on_text_validate = saveTxt)# CHIAMA FUNZIONE DI CAPTURE DEL TESTO E CHIUSURA POPUP
mybutton2.bind(on_press = mypopup.dismiss)
# FUNZIONE CHIAMATA PER INSERIMENTO NUOVO BOTTONE IN TABELLA LOCALTB
def btn_db(self,st):
#con = None
elementList =[]
print "stringa dentro a dtn_db "+ st
try:
con = sqlite3.connect('localdb.db')
cur = con.cursor()
cur.execute("insert into localtb (Item, State) values ( ?, ?)",(st, 0))
con.commit()
cur.execute("select * from localtb")
data = cur.fetchall()
con.close()
for x in data:
print x
elementList.append(x[0])
except:
print "non va"
w = str(elementList)
return w
# CREAZIONE BOTTONE DA INPUTO DI TESTO , TEXT BUTTON == INPUT INSERITO IN BOX
def set_caption(self,stringa):
string = stringa[0].upper()+stringa[1:].lower()
print string, " stringa prima del for"
# DA SISTEMARE CICLO "INUTILE"
#for i in range(1):
link_button = LinkButton(
text = string)
print "tra for e add_widget"
self.links_grid.add_widget(link_button)
print string," strinda PRIMA call a btn_db"
self.btn_db(string) # CALL A FUNZIONE PER INSERIRE IL BOTTONE IN TABELLA LOCALE (LOCALTB)
print string," strinda DOPO call a btn_db"
class LinkButton(ToggleButton):
# GESTIONE DEL TOGGLE.. QUNANDO SI TOGGLA IL BOTTONE PARTE LA QUERY E INVERTE LO STATO ATTUALE CON L'ALTRO STATO , DA 0 A 1 E VICEVERSA PER IL BOTTONE PREMUTO
def toggleState(self):
#con = None
red = (83,0,0,1)
green = (0,83,0,1)
print self.background_color
if self.background_color == [83,0,0,1]:
self.background_color = green
else:
print "dentro ELSE"
self.background_color = red
elementList =[]
pressed = str(self.text)
print "tasto premuto cambio stato: "+pressed
try:
con = sqlite3.connect('localdb.db')
cur = con.cursor()
cur.execute("update localtb set State = (CASE WHEN State = 0 THEN State + 1 WHEN State = 1 THEN State - 1 end ) WHERE Item = ?",(pressed,)) # ATTENTO ALLA VIRGOLA DOPO PRESSED(SE NON NON FUNZIONA)
con.commit()
cur.execute("select * from localtb")
data = cur.fetchall()
con.close()
for x in data:
print x
elementList.append(x[0])
except:
print "non va"
w = str(elementList)
return w
class SmsButton(Button):
# PROVE DI RELOAD SESSIONE PRECENDETE- FALLITE.
def reloadSession(self):
try:
con = sqlite3.connect('localdb.db')
cur = con.cursor()
cur.execute("select * from localtb")
data = cur.fetchall()
con.close()
for x in data:
reload_Element = str(x[0])
if x[1] == 0:
print "in if: ", x[1]
link_button = LinkButton(text = reload_Element,background_color = [83,0,0,1])
else:
print "in else: ", x[1]
link_button = LinkButton(text = reload_Element,background_color = [0,83,0,1])
self.links_grid.add_widget(link_button)
except Exception as inst:
print inst.args
print "non va"
class Test(App):
pass
if __name__ == '__main__':
Test().run()
KV:
#:kivy 1.9.1
MyRootasdasd:
rows: 1
RightArea:
<MyRootasdasd#GridLayout>:
#rows: 1
#RightArea:
<RightArea#GridLayout>:
cols: 1
size_hint_x: 0.3
spacing: '1dp'
ScrollView:
LinksGrid:
id: links_grid
BoxLayout:
size_hint: (1,0.08)
GetLinksButton:
links_grid: links_grid
SmsButton:
links_grid: links_grid
<LinksGrid#GridLayout>:
cols: 2
spacing: '.5dp'
size_hint_y: None
height: self.minimum_height
<SmsButton>:
size_hint_y: 1
text: 'SMS'
on_press: self.reloadSession()
<GetLinksButton>:
size_hint_y: 1
text: 'Get links'
on_press: self.get_caption()
<LinkButton>:
color: (0, 0, 0, 1) #COLORE TESTO
background_normal: '' # RESET DELLA TINTA (STRINGA, quindi carica un immagine non un colore)
background_color: (83, 0, 0, 1) #COLORE SFONDO -> qui sotto la call alla classe che gestisce il toggle del bottone
on_release: self.toggleState()
size_hint_y: None
height: '80dp'
some pieces of code are unused don't worry about it.
Function i need to call is reloadSession that query table and then with the information retrieved create n buttons...
As you can see, in the SmsButton class(in KV) call that function(ON_PRESS), i need to do the same thing but automatically on app start up... How can i do that??
Sorry for my bad english and coding.. Im new, im trying a lot of stuff, i would appreciate your help.
Thank you.
Yvan.
EDIT: removed unused code
EDIT : #bj0
thanks for the tips.. i've tryied to use build function in alla the way i know. but it doesnt work ...i get this error
("'Test' object has no attribute 'links_grid'",)
the code im using now is this..
class Test(App):
def build(self):
try:
con = sqlite3.connect('localdb.db')
cur = con.cursor()
cur.execute("select * from localtb")
data = cur.fetchall()
con.close()
for x in data:
reload_Element = str(x[0])
if x[1] == 0:
print "in if: ", x[1]
link_button = LinkButton(text = reload_Element,background_color = [83,0,0,1])
else:
print "in else: ", x[1]
link_button = LinkButton(text = reload_Element,background_color = [0,83,0,1])
self.links_grid.add_widget(link_button)
except Exception as inst:
print inst.args
print "non va"
obviously Test class has no links_grid attribute.. but how can i solve this problem ?
Thanks again