rabt1100
@rabt1100 (せい りゅう)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

tkinkerとselemiumで繰り返し処理ができない

PythonでGUIで入力した整数値での繰り返し処理に失敗する。
こんにちは今私はpythonでGUIで入力した値をsselemiumに渡し
繰り返し処理ができるようにしたいのですができません
なにか原因は思い当たらないでしょうか?

from smtpd import DebuggingServer
from tkinter import *
from tkinter import ttk
from selenium import webdriver
from time import sleep
from webdriver_manager.chrome import ChromeDriverManager
import os
import signal

root = Tk()
root.title('アクセスツール')

ウィジェットの作成

frame1 = ttk.Frame(root, padding=16)
label1 = ttk.Label(frame1, text='アクセス回数')
t = IntVar()
entry1 = ttk.Entry(frame1, textvariable=t)
button1 = ttk.Button(
frame1,
text='OK',
command=lambda: print('Hello, %s.' % t.get()))

レイアウト

frame1.pack()
label1.pack(side=LEFT)
entry1.pack(side=LEFT)
button1.pack(side=LEFT)

ウィンドウの表示開始

root.mainloop()

drivers = webdriver.Chrome(ChromeDriverManager().install())
try:
for i in range(t):
drivers.switch_to.new_window('window')
drivers.get('https://oasisinfostations.com')

finally:
os.kill(drivers.service.process.pid,signal.SIGTERM)

0

2Answer

プログラムコードはマークダウンのコードブロックで書きましょう。

root.mainloop()

ここでtkinterに制御を渡してウィンドウを閉じるまで戻ってきません。
それが原因ではないですか?

追記: ボタンを押したときの処理を書いてみました。

from smtpd import DebuggingServer
from tkinter import *
from tkinter import ttk
from selenium import webdriver
from time import sleep
from webdriver_manager.chrome import ChromeDriverManager
import os
import signal

drivers = webdriver.Chrome(ChromeDriverManager().install())

def access():
    try:
        for i in range(t.get()):
            drivers.switch_to.new_window('window')
            drivers.get('https://oasisinfostations.com')
    finally:
        os.kill(drivers.service.process.pid,signal.SIGTERM)

root = Tk()
root.title('アクセスツール')

# ウィジェットの作成
frame1 = ttk.Frame(root, padding=16)
label1 = ttk.Label(frame1, text='アクセス回数')
t = IntVar()
entry1 = ttk.Entry(frame1, textvariable=t)
button1 = ttk.Button(frame1, text='OK', command=access)

# レイアウト
frame1.pack()
label1.pack(side=LEFT)
entry1.pack(side=LEFT)
button1.pack(side=LEFT)

# ウィンドウの表示開始
root.mainloop()
0Like

Comments

  1. @rabt1100

    Questioner

    分かりました。
    ところで@shiracamsさん
    貴方ならこの場合どういうコードを書きますか?
  2. afterを使って自動的にスクレイピング開始するか、ボタンを押したときにスクレイピング開始するかのどちらかと思います。
    tkinterとの同時処理ができないようなら、マルチスレッド処理にすると思います。
  3. @rabt1100

    Questioner

    分かりましたありがとうございます😊
  4. ボタンを押したときの処理にしたコードを追記しました。

コード書いてみました。ご参考にしてください。

test.py
from smtpd import DebuggingServer
from tkinter import *
import tkinter as tk
from tkinter import ttk
from selenium import webdriver
from time import sleep
from webdriver_manager.chrome import ChromeDriverManager
import os
import signal

class Gui:
    
    def __init__(self, main_window):

        # Main window
        self.main_window = main_window
        self.main_window.geometry("200x200")
        self.main_window.title("アクセスツール")

        self.frame1 = ttk.Frame(self.main_window, padding=16)
        self.frame1.place(relx=0.05, rely=0.05)
        
        label = tk.Label(self.frame1, text="アクセス回数")
        label.grid(row=0, column=0)

        self.t = tk.IntVar()
        path_entry = tk.Entry(self.frame1, textvariable=self.t)
        path_entry.grid(row=1, column=0)

        button = tk.Button(self.frame1, text="OK", command=self.on_click_action)
        button.grid(row=2, column=0)

        button = tk.Button(self.frame1, text="Close", command=self.on_click_close)
        button.grid(row=3, column=0)

    def on_click_action(self):
        print('Hello, %s.' % self.t.get())
        drivers = webdriver.Chrome(ChromeDriverManager().install())
        try:
            for i in range(self.t.get()):
                drivers.switch_to.new_window('window')
                drivers.get('https://oasisinfostations.com')

        finally:
            os.kill(drivers.service.process.pid,signal.SIGTERM)
        
    def on_click_close(self):
        self.main_window.destroy()
        self.main_window.quit()


def main():

    main_window = tk.Tk()
    Gui(main_window)
    main_window.mainloop()


if __name__ == "__main__":
    main()

0Like

Comments

  1. @rabt1100

    Questioner

    ありがとうございます
    参考にさせて頂きますm(_ _)m
  2. @rabt1100

    Questioner

    ありがとうございます😊

Your answer might help someone💌