diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 43794d2..8ab0e48 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -123,6 +123,8 @@
 
     urlfetch -  It is okay to download files required on testing.
 
+    gui -       Run tests that require a running GUI.
+
 To enable all resources except one, use '-uall,-<resource>'.  For
 example, to run all the tests except for the bsddb tests, give the
 option '-uall,-bsddb'.
@@ -176,7 +178,7 @@
 from test import support
 
 RESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb',
-                  'decimal', 'compiler', 'subprocess', 'urlfetch')
+                  'decimal', 'compiler', 'subprocess', 'urlfetch', 'gui')
 
 
 def usage(msg):
@@ -1073,6 +1075,8 @@
         test_pty
         test_socketserver
         test_tcl
+        test_ttk_guionly
+        test_ttk_textonly
         test_timeout
         test_urllibnet
         test_multiprocessing
@@ -1088,6 +1092,8 @@
         test_kqueue
         test_ossaudiodev
         test_tcl
+        test_ttk_guionly
+        test_ttk_textonly
         test_zipimport
         test_zlib
         """,
@@ -1103,6 +1109,8 @@
         test_ossaudiodev
         test_pep277
         test_tcl
+        test_ttk_guionly
+        test_ttk_textonly
         test_multiprocessing
         """,
     'netbsd3':
@@ -1117,6 +1125,8 @@
         test_ossaudiodev
         test_pep277
         test_tcl
+        test_ttk_guionly
+        test_ttk_textonly
         test_multiprocessing
         """,
 }
diff --git a/Lib/test/test_tk_guionly.py b/Lib/test/test_tk_guionly.py
deleted file mode 100644
index d3eb5a1c..0000000
--- a/Lib/test/test_tk_guionly.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from test import support
-from tkinter.test import runtktests
-
-def test_main(enable_gui=False):
-    if enable_gui:
-        if support.use_resources is None:
-            support.use_resources = ['gui']
-        elif 'gui' not in support.use_resources:
-            support.use_resources.append('gui')
-
-    support.run_unittest(*runtktests.get_tests(text=False))
-
-if __name__ == '__main__':
-    test_main(enable_gui=True)
diff --git a/Lib/test/test_tk_textonly.py b/Lib/test/test_tk_textonly.py
deleted file mode 100644
index ad13244..0000000
--- a/Lib/test/test_tk_textonly.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from test import support
-from tkinter.test import runtktests
-
-def test_main():
-    support.run_unittest(*runtktests.get_tests(gui=False))
-
-if __name__ == '__main__':
-    test_main()
diff --git a/Lib/test/test_ttk_guionly.py b/Lib/test/test_ttk_guionly.py
new file mode 100644
index 0000000..bff490a
--- /dev/null
+++ b/Lib/test/test_ttk_guionly.py
@@ -0,0 +1,25 @@
+import os
+import sys
+from tkinter import ttk
+from tkinter.test import runtktests
+from _tkinter import TclError
+from test import support
+
+try:
+    ttk.Button()
+except TclError as msg:
+    # assuming ttk is not available
+    raise support.TestSkipped("ttk not available: %s" % msg)
+
+def test_main(enable_gui=False):
+    if enable_gui:
+        if support.use_resources is None:
+            support.use_resources = ['gui']
+        elif 'gui' not in support.use_resources:
+            support.use_resources.append('gui')
+
+    support.run_unittest(
+            *runtktests.get_tests(text=False, packages=['test_ttk']))
+
+if __name__ == '__main__':
+    test_main(enable_gui=True)
diff --git a/Lib/test/test_ttk_textonly.py b/Lib/test/test_ttk_textonly.py
new file mode 100644
index 0000000..131e420
--- /dev/null
+++ b/Lib/test/test_ttk_textonly.py
@@ -0,0 +1,11 @@
+import os
+import sys
+from test import support
+from tkinter.test import runtktests
+
+def test_main():
+    support.run_unittest(
+            *runtktests.get_tests(gui=False, packages=['test_ttk']))
+
+if __name__ == '__main__':
+    test_main()
diff --git a/Lib/tkinter/test/runtktests.py b/Lib/tkinter/test/runtktests.py
index 3d3868f..7067594 100644
--- a/Lib/tkinter/test/runtktests.py
+++ b/Lib/tkinter/test/runtktests.py
@@ -19,9 +19,13 @@
             return True
     return False
 
-def get_tests_modules(basepath=this_dir_path, gui=True):
+def get_tests_modules(basepath=this_dir_path, gui=True, packages=None):
     """This will import and yield modules whose names start with test_
-    and are inside packages found in the path starting at basepath."""
+    and are inside packages found in the path starting at basepath.
+
+    If packages is specified it should contain package names that
+    want their tests collected.
+    """
     py_ext = '.py'
 
     for dirpath, dirnames, filenames in os.walk(basepath):
@@ -31,6 +35,9 @@
 
         if is_package(dirpath) and filenames:
             pkg_name = dirpath[len(basepath) + len(os.sep):].replace('/', '.')
+            if packages and pkg_name not in packages:
+                continue
+
             filenames = filter(
                     lambda x: x.startswith('test_') and x.endswith(py_ext),
                     filenames)
@@ -48,7 +55,7 @@
                     if gui:
                         raise
 
-def get_tests(text=True, gui=True):
+def get_tests(text=True, gui=True, packages=None):
     """Yield all the tests in the modules found by get_tests_modules.
 
     If nogui is True, only tests that do not require a GUI will be
@@ -58,7 +65,7 @@
         attrs.append('tests_nogui')
     if gui:
         attrs.append('tests_gui')
-    for module in get_tests_modules(gui=gui):
+    for module in get_tests_modules(gui=gui, packages=packages):
         for attr in attrs:
             for test in getattr(module, attr, ()):
                 yield test
diff --git a/Lib/tkinter/test/test_ttk/test_widgets.py b/Lib/tkinter/test/test_ttk/test_widgets.py
index e92d2fa..48cf614 100644
--- a/Lib/tkinter/test/test_ttk/test_widgets.py
+++ b/Lib/tkinter/test/test_ttk/test_widgets.py
@@ -708,10 +708,13 @@
 class TreeviewTest(unittest.TestCase):
 
     def setUp(self):
-        self.tv = ttk.Treeview()
+        self.root = support.get_tk_root()
+        self.tv = ttk.Treeview(self.root)
 
     def tearDown(self):
         self.tv.destroy()
+        self.root.update_idletasks()
+        self.root.destroy()
 
 
     def test_bbox(self):
diff --git a/Misc/NEWS b/Misc/NEWS
index 04d55fe..f591976 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -423,6 +423,12 @@
   buffer.
 
 
+Tests
+-----
+
+- Issue #5083: New 'gui' resource for regrtest.
+
+
 Docs
 ----
 
