Latest posts on python tkinter виджет topichttps://python.su/forum/topic/37222/2019-05-19T07:03:29+03:00Общий :: GUI :: python tkinter виджет
2019-05-19T07:03:29+03:00BOBAH201643<blockquote><em>PEHDOM</em><br/>Это не велосипед, это медведь на велосипеде который крутит педали костылями</blockquote>Точно сказано <img src="/static/djangobb_forum/img/smilies/wink.png" />
Общий :: GUI :: python tkinter виджет
2019-05-17T22:50:56+03:00PEHDOM201631<blockquote><em>BOBAH</em><br/>унуть в отдельный поток цикл, который через каждые, например 0.1 с. считывает весь текст с твоего текстового виджета, подсчитывает кол-во \n и с помощью label.config(text = ‘Новый текст’) - изменяет значение label.<br/>Примерный код такого “безобразия”, только закрытие процесса в случае выхода не реализовано:</blockquote>Это не велосипед, это медведь на велосипеде который крутит педали костылями. Ткинтер событийно ориентированоый модуль, и этим нужно пользоваться.<br/><br/><strong>linkington3</strong> не вы первый задаетесь этим вопросом и все уже <strike>украдено</strike> придумано до нас. Посмотрите тут <a href="https://stackoverflow.com/questions/16369470/tkinter-adding-line-number-to-text-widget">https://stackoverflow.com/questions/16369470/tkinter-adding-line-number-to-text-widget</a><br/>по ходу то что нужно.
Общий :: GUI :: python tkinter виджет
2019-05-17T12:39:38+03:00BOBAH201602Не знаю насколько это велосипед, но можно: <br/>создать label в нужном месте, <br/>сунуть в отдельный поток цикл, который через каждые, например 0.1 с. считывает весь текст с твоего текстового виджета, подсчитывает кол-во \n и с помощью label.config(text = ‘Новый текст’) - изменяет значение label.<br/>Примерный код такого “безобразия”, только закрытие процесса в случае выхода не реализовано:<br/><div class="code"><pre> <span class="kn">import</span> <span class="nn">tkinter</span>
<span class="kn">from</span> <span class="nn">threading</span> <span class="kn">import</span> <span class="n">Thread</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span>
<span class="k">class</span> <span class="nc">MyWindow</span><span class="p">(</span><span class="n">tkinter</span><span class="o">.</span><span class="n">Tk</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_create_widgets</span><span class="p">()</span>
<span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_update</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">_create_widgets</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">entry_text</span> <span class="o">=</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">Text</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">entry_text</span><span class="o">.</span><span class="n">pack</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label_pos_cursor</span> <span class="o">=</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">Label</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="s1">'0'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label_pos_cursor</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span><span class="o">=</span><span class="n">tkinter</span><span class="o">.</span><span class="n">BOTTOM</span><span class="p">,</span> <span class="n">anchor</span><span class="o">=</span><span class="s1">'w'</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">entry_text</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'1.0'</span><span class="p">,</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
<span class="n">allusion</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label_pos_cursor</span><span class="o">.</span><span class="n">config</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="n">allusion</span><span class="p">)</span>
<span class="n">sleep</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
<span class="n">root</span> <span class="o">=</span> <span class="n">MyWindow</span><span class="p">()</span>
<span class="n">root</span><span class="o">.</span><span class="n">mainloop</span><span class="p">()</span>
</pre></div>
Общий :: GUI :: python tkinter виджет
2019-05-16T17:55:00+03:00linkington3201578Мне нужно сделать виджет, который будет считать и выводить слева от виджета ввода текста номер строки(как в sublime text и ему подобных). Сам мучаюсь уже вторую неделю. Надеюсь на вашу помощь. Надо б встроить код данного виджета в мой(не очень мой).<br/><br/>код на python 3.7<br/><br/><div class="code"><pre> <span class="kn">import</span> <span class="nn">tkinter</span>
<span class="kn">from</span> <span class="nn">tkinter.filedialog</span> <span class="kn">import</span> <span class="n">asksaveasfile</span><span class="p">,</span> <span class="n">askopenfile</span>
<span class="kn">from</span> <span class="nn">tkinter.messagebox</span> <span class="kn">import</span> <span class="n">showerror</span>
<span class="kn">import</span> <span class="nn">easygui</span>
<span class="n">FILE_NAME</span> <span class="o">=</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">NONE</span>
<span class="k">def</span> <span class="nf">credit</span><span class="p">():</span>
<span class="n">easygui</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span>
<span class="s2">" You can save files with buttons Save and Save As </span><span class="se">\n</span><span class="s2"> You can open files with button Open </span><span class="se">\n</span><span class="s2"> You can create new file with button New File"</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">new_file</span><span class="p">():</span>
<span class="k">global</span> <span class="n">FILE_NAME</span>
<span class="n">FILE_NAME</span> <span class="o">=</span> <span class="s2">"Untitled"</span>
<span class="n">text</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s1">'1.0'</span><span class="p">,</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">save_file</span><span class="p">():</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'1.0'</span><span class="p">,</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">FILE_NAME</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span>
<span class="n">out</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">out</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">save_as</span><span class="p">():</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">asksaveasfile</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s1">'w'</span><span class="p">,</span> <span class="n">defaultextension</span><span class="o">=</span><span class="s1">'.txt'</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'1.0'</span><span class="p">,</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">out</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">showerror</span><span class="p">(</span><span class="n">title</span><span class="o">=</span><span class="s2">"Oops!"</span><span class="p">,</span> <span class="n">message</span><span class="o">=</span><span class="s2">"Unable to save file...."</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">open_file</span><span class="p">():</span>
<span class="k">global</span> <span class="n">FILE_NAME</span>
<span class="n">inp</span> <span class="o">=</span> <span class="n">askopenfile</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">"r"</span><span class="p">)</span>
<span class="k">if</span> <span class="n">inp</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">FILE_NAME</span> <span class="o">=</span> <span class="n">inp</span><span class="o">.</span><span class="n">name</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">inp</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">text</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s1">'1.0'</span><span class="p">,</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
<span class="n">text</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="s1">'1.0'</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="n">root</span> <span class="o">=</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">Tk</span><span class="p">()</span>
<span class="n">root</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"2Text"</span><span class="p">)</span>
<span class="n">root</span><span class="o">.</span><span class="n">geometry</span><span class="p">(</span><span class="s2">"600x400"</span><span class="p">)</span>
<span class="n">root</span><span class="o">.</span><span class="n">minsize</span><span class="p">(</span><span class="n">width</span><span class="o">=</span><span class="mi">600</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mi">400</span><span class="p">)</span>
<span class="n">menuBar</span> <span class="o">=</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">Menu</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
<span class="n">fileMenu</span> <span class="o">=</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">Menu</span><span class="p">(</span><span class="n">menuBar</span><span class="p">)</span>
<span class="n">menuBar</span><span class="o">.</span><span class="n">add_command</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s2">"New"</span><span class="p">,</span> <span class="n">command</span><span class="o">=</span><span class="n">new_file</span><span class="p">)</span>
<span class="n">menuBar</span><span class="o">.</span><span class="n">add_command</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s2">"Open"</span><span class="p">,</span> <span class="n">command</span><span class="o">=</span><span class="n">open_file</span><span class="p">)</span>
<span class="n">menuBar</span><span class="o">.</span><span class="n">add_command</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s2">"Save"</span><span class="p">,</span> <span class="n">command</span><span class="o">=</span><span class="n">save_file</span><span class="p">)</span>
<span class="n">menuBar</span><span class="o">.</span><span class="n">add_command</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s2">"Save As"</span><span class="p">,</span> <span class="n">command</span><span class="o">=</span><span class="n">save_as</span><span class="p">)</span>
<span class="n">menuBar</span><span class="o">.</span><span class="n">add_command</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s2">"Exit"</span><span class="p">,</span> <span class="n">command</span><span class="o">=</span><span class="n">root</span><span class="o">.</span><span class="n">quit</span><span class="p">)</span>
<span class="n">menuBar</span><span class="o">.</span><span class="n">add_command</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s2">"Credits & Info"</span><span class="p">,</span> <span class="n">command</span><span class="o">=</span><span class="n">credit</span><span class="p">)</span>
<span class="n">root</span><span class="o">.</span><span class="n">config</span><span class="p">(</span><span class="n">menu</span><span class="o">=</span><span class="n">menuBar</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">tkinter</span><span class="o">.</span><span class="n">Text</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mi">400</span><span class="p">)</span>
<span class="n">text</span><span class="o">.</span><span class="n">pack</span><span class="p">()</span>
<span class="n">root</span><span class="o">.</span><span class="n">mainloop</span><span class="p">()</span>
</pre></div>