Wprowadzanie danych - GUI - Tkinter - wszystko 1 oknie

0

Wybrałem Tkintera:) Mam taki kod:

import tkSimpleDialog
from Tkinter import *

class MyDialog(tkSimpleDialog.Dialog):

    def body(self, master):

        Label(master, text="First:").grid(row=0)
        Label(master, text="Second:").grid(row=1)

        self.e1 = Entry(master)
        self.e2 = Entry(master)

        self.e1.grid(row=0, column=1)
        self.e2.grid(row=1, column=1)
        return self.e1 # initial focus

    def apply(self):
        first = int(self.e1.get())
        second = int(self.e2.get())
        self.result = first, second

root = Tk()
d = MyDialog(root)
print d.result
root.destroy()

Co jednak zrobic, zeby pojawialo sie tylko okienko do wprowadzania danych, bo jak na razie pojawia sie 2 : to do wprowadzania, jak i takie puste :/

0

Nikt nie wie czy nie da sie?:P

0

ja raczej wybrałem wxPython ale poszukaj tutaj:
http://zetcode.com/tutorials/tkintertutorial/
Bardzo rozbudowany tutek dla tkinkera

0

No mi w sumie obojetnie:) Jakbys poradzil, jak napisac to w tym, w czym Ty piszesz, i dodatkowo, jak to polaczyc z Pythonem [jakie moduly] to bede baaaardzo wdzieczny:)

0

Wszystko o wxPythonie czego się nauczyłem znam z poradnika
http://zetcode.com/wxpython/
nie przekaże Ci nic innego co tam nie jest napisane .

0

Do prostych programów Tkinter nadaje się idealnie - nie ma dużych wymagań i jest zazwyczaj dostarczany z Pythonem.

Pewnie dialog wymaga by forma była otwarta, więc sobie jedną tworzy...

import tkSimpleDialog
from Tkinter import *
import sys

class Application(Frame):
	def createWidgets(self):
		Label(self, text="First:").grid(row=0)
		Label(self, text="Second:").grid(row=1)

		self.e1 = Entry(self)
		self.e2 = Entry(self)

		self.e1.grid(row=0, column=1)
		self.e2.grid(row=1, column=1)

		self.okBtn = Button(self)
		self.okBtn["text"] = "OK",
		self.okBtn["command"] = self.okAction
		self.okBtn.grid(row=0,column=3)
		
		self.AnulujBtn = Button(self)
		self.AnulujBtn["text"] = "Anuluj",
		self.AnulujBtn["command"] = self.cancelAction
		self.AnulujBtn.grid(row=1,column=3)
		
	def okAction(self):
		first = int(self.e1.get())
		second = int(self.e2.get())
		self.result = first, second
		self.quit()
		
	def cancelAction(self):
		sys.exit()
	def __init__(self, master=None):
		Frame.__init__(self, master)
		self.pack()
		self.createWidgets()
			
root = Tk()
root.title("Programikr")
root.resizable(0,0)
d = Application(master=root)
d.mainloop()

print d.result

Tak mniej więcej by to wyglądało bez dialogu.

Do Pythona fajny jest też pyqt4 - http://www.python.rk.edu.pl/w/p/pyqt4-i-qt-designer-dla-opornych/

0

Dziękuję, teraz jest ok:) a może ktoś jeszcze zna spoób na polskie znaki? tylko najlepiej, zeby byly widoczne zarówno pod Win jak i po Lin ... ?

0

U mnie pod Debianem z Python'em 2.6 wystarczało dodać na początek skryptu linijkę:
# -*- coding: utf-8 -*-
A napisy zamiast np. "Żółć" wpisujesz u"Żółć" - po prostu oznaczasz, że ciąg znaków jest w unicode.
user image

Nie wiem jak to działa pod Win.

0

używam gedita i krzyczy mi, że jakiś zły znak:( a nie da sie tego jakos uniezaleznic od edytora? Bo bym potrzebowal zanczki polskie na windowsa, na pyscripter dokladnie;/ ale dziekuje

0

Ja używam geany, kod Pythona nie jest zależny od edytora, tylko od interpretera. Python 3.0 jest cały zintegrowany z UTF i nie trzeba kombinować z UTF, w Pythonie 2.x trzeba zrobić to co napisałem. Że zły znak to krzyczy jak nie zrobisz tego co napisałem (czyli na początku skryptu -- coding: utf-8 -- i ciągi znaków jako u"ciąg"). Chyba nie muszę wspominać, że źródło powinno używać kodowania utf8?

# -*- coding: utf-8 -*-
from Tkinter import *
import sys
 
class Application(Frame):
        def createWidgets(self):
                Label(self, text=u"Żółć:").grid(row=0)
                Label(self, text=u"Ściema:").grid(row=1)
 
                self.e1 = Entry(self)
                self.e2 = Entry(self)
 
                self.e1.grid(row=0, column=1)
                self.e2.grid(row=1, column=1)
 
                self.okBtn = Button(self)
                self.okBtn["text"] = "OK",
                self.okBtn["command"] = self.okAction
                self.okBtn.grid(row=0,column=3)
 
                self.AnulujBtn = Button(self)
                self.AnulujBtn["text"] = "Anuluj",
                self.AnulujBtn["command"] = self.cancelAction
                self.AnulujBtn.grid(row=1,column=3)
 
        def okAction(self):
                first = int(self.e1.get())
                second = int(self.e2.get())
                self.result = first, second
                self.quit()
 
        def cancelAction(self):
                sys.exit()
        def __init__(self, master=None):
                Frame.__init__(self, master)
                self.pack()
                self.createWidgets()
 
root = Tk()
root.title("Programikr")
root.resizable(0,0)
d = Application(master=root)
d.mainloop()
 
print d.result

Taki kod u mnie bez problemu się uruchamia na Pythonie 2.6.

Python w wersji 3.x jest lepiej zintegrowany z UTF, piszesz stringi "" (bez u), nazwy zmiennych i funkcji również mogą mieć polskie znaki. Nie trzeba też na początku skryptu dodawać -- coding: utf-8 --

0

Rzeczywiście, pod Ubuntu + gedit działa, widocznie źle skopiowałem tą linijkę od Ciebie. Pozostaje mi jeszcze sprawdzić, czy zadziała pod Windowsem:> dziękuję za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1